javascript - 对多维数组中的列进行排序

标签 javascript jquery arrays sorting

我想使用第一行对多维数组进行排序, 我希望第二行和第三行获得与第一行相同的排序顺序

这是数组的示例:

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/

相关文章:

javascript - 将迭代生成的 td-s append 到 append 的 tr

javascript - jquery 根本不触发

jquery - 从另一个本地主机访问 markLogic

python - 根据颜色值将多维 Numpy 数组转换为二维数组

javascript - 当调用返回相同对象的函数时,无论是否作为构造函数调用,我是否应该使用 `new` ?

javascript - setTimeout 如何防止潜在的 stackoverflow

javascript - Laravel - JS [ajax] Var 必须是常量

javascript - 位置是否在多边形内找到 C#

arrays - 如何删除二维数组中的相似数组?

javascript - 如何在 javascript 中创建删除/删除功能按钮?可以删除元素的按钮