如何按列值对二维数组sorting?

任何人可以帮助我在JavaScript中sorting2维数组?

它将具有以下格式的数据:

[12, AAA] [58, BBB] [28, CCC] [18, DDD] 

它应该看起来像这样sorting时:

 [12, AAA] [18, DDD] [28, CCC] [58, BBB] 

所以基本上,按第一列sorting。

干杯

这很简单:

 var a = [[12, 'AAA'], [58, 'BBB'], [28, 'CCC'],[18, 'DDD']]; a.sort(sortFunction); function sortFunction(a, b) { if (a[0] === b[0]) { return 0; } else { return (a[0] < b[0]) ? -1 : 1; } } 

我邀请您阅读文档 。

如果你想按第二列sorting,你可以这样做:

 a.sort(compareSecondColumn); function compareSecondColumn(a, b) { if (a[1] === b[1]) { return 0; } else { return (a[1] < b[1]) ? -1 : 1; } } 

最好的方法是使用以下内容,因为第一列中可能有重复的值。

  var arr = [[12, 'AAA'], [12, 'BBB'], [12, 'CCC'],[28, 'DDD'], [18, 'CCC'],[12, 'DDD'],[18, 'CCC'],[28, 'DDD'],[28, 'DDD'],[58, 'BBB'],[68, 'BBB'],[78, 'BBB']]; arr.sort(function(a,b) { return a[0]-b[0] }); 

尝试这个

 //WITH FIRST COLUMN arr = arr.sort(function(a,b) { return a[0] - b[0]; }); //WITH SECOND COLUMN arr = arr.sort(function(a,b) { return a[1] - b[1]; }); 

注:原始答案使用大于(>)而不是( – )减去这是评论所指的不正确。

如果你像我一样,每次你想改变你正在sorting的列,你都不会想要改变每个索引。

 function sortByColumn(a, colIndex){ a.sort(sortFunction); function sortFunction(a, b) { if (a[colIndex] === b[colIndex]) { return 0; } else { return (a[colIndex] < b[colIndex]) ? -1 : 1; } } return a; } var sorted_a = sortByColumn(a, 2); 

没什么特别的,只需要从数组中返回一个特定索引的值就可以节省成本。

 function sortByCol(arr, colIndex){ arr.sort(sortFunction) function sortFunction(a, b) { a = a[colIndex] b = b[colIndex] return (a === b) ? 0 : (a < b) ? -1 : 1 } } // Usage var a = [[12, 'AAA'], [58, 'BBB'], [28, 'CCC'],[18, 'DDD']] sortByCol(a, 0) console.log(JSON.stringify(a)) // "[[12,"AAA"],[18,"DDD"],[28,"CCC"],[58,"BBB"]]" 

由于我的用例涉及数十列,所以我扩展了@ jahroy的答案。 (也刚刚意识到@ charles-clayton有同样的想法。)
我传递了我想要sorting的参数,并使用所需的索引重新定义了sorting函数,以便进行比较。

 var ID_COLUMN=0 var URL_COLUMN=1 findings.sort(compareByColumnIndex(URL_COLUMN)) function compareByColumnIndex(index) { return function(a,b){ if (a[index] === b[index]) { return 0; } else { return (a[index] < b[index]) ? -1 : 1; } } } 

使用箭头函数,并按第二个string字段进行sorting

 var a = [[12, 'CCC'], [58, 'AAA'], [57, 'DDD'], [28, 'CCC'],[18, 'BBB']]; a.sort((a, b) => a[1].localeCompare(b[1])); console.log(a)