1. ホーム
  2. ジャバスクリプト

[解決済み】Javascript - 別の配列に基づく配列の並べ替え

2022-04-15 16:46:49

質問

このような配列をソートして並べ替えることは可能でしょうか?

itemsArray = [ 
    ['Anne', 'a'],
    ['Bob', 'b'],
    ['Henry', 'b'],
    ['Andrew', 'd'],
    ['Jason', 'c'],
    ['Thomas', 'b']
]

を、この配列の配置に合わせます。

sortingArr = [ 'b', 'c', 'b', 'b', 'a', 'd' ]

残念なことに、IDを記録するものがありません。sortingArrとなるべく一致するようにitems-arrayを優先する必要がありそうですね。

更新しました。

以下は、私が求めている出力です。

itemsArray = [    
    ['Bob', 'b'],
    ['Jason', 'c'],
    ['Henry', 'b'],
    ['Thomas', 'b']
    ['Anne', 'a'],
    ['Andrew', 'd'],
]

どうすればいいのでしょうか?

どのように解決するのですか?

のようなものです。

items = [ 
    ['Anne', 'a'],
    ['Bob', 'b'],
    ['Henry', 'b'],
    ['Andrew', 'd'],
    ['Jason', 'c'],
    ['Thomas', 'b']
]

sorting = [ 'b', 'c', 'b', 'b', 'c', 'd' ];
result = []

sorting.forEach(function(key) {
    var found = false;
    items = items.filter(function(item) {
        if(!found && item[1] == key) {
            result.push(item);
            found = true;
            return false;
        } else 
            return true;
    })
})

result.forEach(function(item) {
    document.writeln(item[0]) /// Bob Jason Henry Thomas Andrew
})

もっと短いコードですが、これは sorting の配列になります。

result = items.map(function(item) {
    var n = sorting.indexOf(item[1]);
    sorting[n] = '';
    return [n, item]
}).sort().map(function(j) { return j[1] })