104

JavaScriptで2次元配列をソートするのを手伝ってくれる人はいますか?

次の形式のデータが含まれます。

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

ソートすると、次のようになります。

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

基本的に、最初の列でソートします。

乾杯

4

11 に答える 11

132

それはとても簡単です:

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;
    }
}

ドキュメントを読むことをお勧めします。

2 番目の列で並べ替えたい場合は、次のようにします。

a.sort(compareSecondColumn);

function compareSecondColumn(a, b) {
    if (a[1] === b[1]) {
        return 0;
    }
    else {
        return (a[1] < b[1]) ? -1 : 1;
    }
}
于 2013-04-19T04:11:13.287 に答える
74

最初の列に繰り返し値がある可能性があるため、次の方法を使用するのが最善の方法です。

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]
});
于 2014-01-21T22:33:45.233 に答える
13

アロー関数を使用し、2 番目の文字列フィールドで並べ替える

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

于 2017-05-18T14:48:02.753 に答える
11

あなたが私のような人なら、並べ替える列を変更するたびに各インデックスを変更したくないでしょう。

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);
于 2014-05-30T16:51:52.117 に答える
6

一行で:

var cars = [
  {type:"Volvo", year:2016},
  {type:"Saab", year:2001},
  {type:"BMW", year:2010}
]


function myFunction() {
  return cars.sort((a, b)=> a.year - b.year)
}
于 2020-03-21T13:53:15.620 に答える
3

配列から特定のインデックスの値を返すのにかかるコストを節約するだけで、特別なことは何もありません。

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"]]"
于 2016-11-02T20:32:25.103 に答える