如何按第4个值排序2维数组?

时间:2017-08-08 12:38:26

标签: javascript arrays

我知道这个问题的答案并不缺少,但是请耐心等待,我已经尝试了很多解决方案,而且我仍然无法使用JavaScript按第4个值排序2维数组。

这是列表的样子(数组可能包含无限量的列表):

colors = [[247, 247, 247, 429, 1], [132, 128, 132, 2, 1], [37, 29, 37, 649, 1]]

输出应为:

colors = [[37, 29, 37, 649, 1], [247, 247, 247, 429, 1], [132, 128, 132, 2, 1]]

这是我尝试的内容:

colors.sort(function(a,b){
    alert(a[3] - b[3]);
});

上面的代码返回NaN,我不知道为什么......

如果它可以帮助python相当于我想要实现的目标:

sorted_colors = sorted(colors(u), key=lambda x: -x[3])

4 个答案:

答案 0 :(得分:3)

Array#sort回调需要返回一个数字。您不会返回减法结果,只需显示警报即可。移除alert(),然后返回b[3] - a[3]以获取所需的订单。



var colors = [[247, 247, 247, 429, 1], [132, 128, 132, 2, 1], [37, 29, 37, 649, 1]];

colors.sort(function(a,b){
    return b[3] - a[3];
});

console.log(colors);




答案 1 :(得分:2)

你快到了。您应该考虑查看Array#sort() docs。这不是正确的语法。

colors.sort(function(a,b){
    alert(a[3] - b[3]);
});

您应该返回结果而非警告

colors.sort(function(a,b){
    return b[3] - a[3];
});

答案 2 :(得分:2)

因为.sort()中的函数要求您返回值。你只是提醒一个值。

这是一个有效的例子:

var colors = [[247, 247, 247, 429, 1], [132, 128, 132, 2, 1], [37, 29, 37, 649, 1]],
    sorted = colors.sort(function(a, b) { return b[3] - a[3]; }); // DESC
console.log(sorted);

答案 3 :(得分:1)

您在编写警报(...)时没有比较,您必须返回结果,请使用:

colors.sort(function(a,b){
    return b[3] - a[3]; // b - a when you are sorting 9->1, a-b otherwise
});