我想使用第一行对多维数组进行排序, 我希望第二行和第三行获得与第一行相同的排序顺序
这是数组的示例:
var arr =
[
[1,3,5,6,0,2],
[1,2,7,4,0,6],
[1,2,3,4,5,6]
]
我想要的结果=
[
[0,1,2,3,5,6],
[0,1,6,2,7,4],
[5,1,6,2,3,4]
]
我尝试了以下功能,但它没有按我想要的方式工作
arr = arr.sort(function(a,b) {
return a[0] > b[0];
});
我的功能出了什么问题? 谢谢
最佳答案
我想我明白你在寻找什么:
a = [
[1,3,5,6,0,2],
[1,2,7,4,0,6],
[1,2,3,4,5,6]
]
transpose = m => m[0].map((_, c) => m.map(r => r[c]));
z = transpose(transpose(a).sort((x, y) => x[0] - y[0]))
z.map(r =>
document.write('<pre>'+JSON.stringify(r) + '</pre>'));
在 ES5 中
transpose = function(m) {
return m[0].map(function (_, c) {
return m.map(function (r) {
return r[c]
})
})
};
z = transpose(transpose(a).sort(function (x, y) { return x[0] - y[0] }));
UPD:转置技巧有点“聪明”,但效率很低,如果你的矩阵很大,这里有一个更快的方法:
a = [
[1,3,5,6,0,2],
[1,2,7,4,0,6],
[1,2,3,4,5,6]
]
t = a[0].map((e, i) => [e, i]).sort((x, y) => x[0] - y[0]);
z = a.map(r => t.map(x => r[x[1]]));
z.map(r =>
document.write('<pre>'+JSON.stringify(r) + '</pre>'));
基本上,对第一行进行排序并记住索引,然后对于每一行,按索引选取值。
关于javascript - 对多维数组中的列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35469481/