javascriptで1つのサブ配列を並べ替えるときに、多次元配列の順序を変更するにはどうすればよいですか?

F.ヴォスニム

1つのサブ配列を並べ替えるときに、並べ替えられたサブ配列の新しい順序に従って、他のサブ配列の要素の順序を変更するにはどうすればよいですか。

var op = [];

op[0] = [0, "1:7001", "1:7002", "1:7003", "1:7004", "1:7005"];
op[1] = [1, "1:8001", "1:8002", "1:8003", "1:8004", "1:7005"];
op[2] = ["asw", 3, 5, 1, 10, 2];


op[2] = op[2].slice(0, 1).concat(op[2].slice(1, op[2].length).sort(function(a,b) {
    return b - a;
}));

console.log(op);

予想される配列は次のようになります。

[0, "1:7004", "1:7002", "1:7001", "1:7005", "1:7003"];
[1, "1:8004", "1:8002", "1:8001", "1:7005", "1:8003"];
[ "asw", 10, 5, 3, 2, 1 ]
ニーナ・ショルツ

ソート用の値とインデックスのオブジェクトを含む一時配列を取得し、ソートされた配列のインデックスを使用して他の配列をマップすることができます。

このアプローチは、マップを使用し並べ替えと呼ばれます

var op = [
        [0, "1:7001", "1:7002", "1:7003", "1:7004", "1:7005"],
        [1, "1:8001", "1:8002", "1:8003", "1:8004", "1:7005"],
        ["asw", 3, 5, 1, 10, 2]
    ],
    order = op[2]                                  // take op[2] as pattern
        .slice(1)                                  // omit first element
        .map((v, i) => ({ v, i: i + 1 }))          // take value and index with offset
        .sort(({ v: a }, { v: b }) => b - a);      // sort by value desc

order.unshift({ i: 0 });                           // keep first item at index zero

op = op.map(a => order.map(({ i }) => a[i]));      // map value at index

console.log(op);
.as-console-wrapper { max-height: 100% !important; top: 0; }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ