按特定数组的顺序对其他数组进行排序?

sub*_*nid 5 javascript arrays sorting rowsorter

我有一堆这种形式的数组:

var myRows = [
    [{idx: 0, val: 90}, {idx: 1, val: 75}, {idx: 2, val: 35}],
    [{idx: 0, val: 50}, {idx: 1, val: 17}, {idx: 2, val: 95}],
    [{idx: 0, val: 10}, {idx: 1, val: 24}, {idx: 2, val: 80}]
  // ...
];
Run Code Online (Sandbox Code Playgroud)

让我们说我想按顺序排序第一行val,所以它变成:

[{idx: 2, val: 35}, {idx: 1, val: 75}, {idx: 0, val: 90}]
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法来对剩余的数组进行排序,以便它们的顺序与idx排序的第一行的顺序相匹配?

myArrays = [
    [{idx: 2, val: 35}, {idx: 1, val: 75}, {idx: 0, val: 90}]
  , [{idx: 2, val: 95}, {idx: 1, val: 17}, {idx: 0, val: 50}]
  , [{idx: 2, val: 80}, {idx: 1, val: 24}, {idx: 0, val: 10}]
  // ...
];
Run Code Online (Sandbox Code Playgroud)

也许这可能没有idx财产?

Nin*_*olz 2

您可以使用地图排序并将映射应用于所有项目。

该提案保存索引,对数组进行排序,并将该顺序应用于所有其他数组。

// the array to be sorted
var list = [[{ idx: 0, val: 90 }, { idx: 1, val: 75 }, { idx: 2, val: 35 }], [{ idx: 0, val: 50 }, { idx: 1, val: 17 }, { idx: 2, val: 95 }], [{ idx: 0, val: 10 }, { idx: 1, val: 24 }, { idx: 2, val: 80 }]];

// temporary array holds objects with position and sort-value
var mapped = list[0].map(function (el, i) {
    return { index: i, value: el.val };
})

// sorting the mapped array containing the reduced values
mapped.sort(function (a, b) {
    return a.value - b.value;
});

// rearrange all items in list
list.forEach(function (a, i, aa) {
    aa[i] = mapped.map(function (el) {
        return a[el.index];
    });
});

console.log(list);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)