我有一堆这种形式的数组:
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}]
// ...
];
假设我想按 val
升序对第一行进行排序,因此它变成:
[{idx: 2, val: 35}, {idx: 1, val: 75}, {idx: 0, val: 90}]
是否有一种简单的方法来对剩余的数组进行排序,以便它们的顺序与排序的第一行的 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}]
// ...
];
如果没有 idx
属性,也许这是可能的?
最佳答案
你可以使用 sorting with map并将映射应用于所有项目。
该提案保存索引,对数组进行排序并将该顺序应用于所有其他数组。
// 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);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 按特定数组的顺序对其他数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40991073/