gpt4 book ai didi

javascript - 按数字和字典顺序对多维数组进行排序javascript

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:57:24 25 4
gpt4 key购买 nike

在过去的 2 天里,我一直在绞尽脑汁试图找到解决问题的方法,但我无法弄清楚。

我需要先对数组数组进行数值排序,然后再按字典顺序排序。虽然自定义 a < b 函数可以解决第一个问题,但普通的 array.sort() 可以解决第二个问题。但我不知道如何将它们结合起来。

我有一个类似于这个的数组:

var arr = [
[ '80', '1', '230' ],
[ '9', '1', '230' ],
[ 'Ken', '6', '100' ],
[ 'Dan', '2', '800' ],
[ 'Tom', '6', '500' ],
[ 'team10', '2', '222' ],
[ 'team9', '2', '222' ]
];

这个数组需要先按照arr[n][1]中的数字进行数值排序(从大到小)。具有相同 arr[n][1] 值的结果需要根据 arr[n][2](从大到小)按数字顺序排列。最后,具有相同值 [n][1] 和 [n][2] 的结果需要根据 arr[n][0] 按字典顺序排序。

到目前为止我得到的最远的是这种方法:

function sortArr() {
arr.sort(function(a,b) {
if (a[1] === b[1]) {
if (a[2] === b[2]) {
return b[0] < a[0];
}
return a[2]-b[2];
}
return b[1]-a[1]
});
}

虽然数字排序适用于此,但词典排序却不行。任何帮助将不胜感激。

最佳答案

我建议对 String#localeCompare 使用链式方法用于字符串。

排序顺序:

  • 在索引 1 中
  • 在索引 2desc
  • 在索引 0
    • 不是数字部分 asc
    • 数字部分升序

var arr = [[ '80', '1', '230' ], [ '9', '1', '230' ], [ 'Ken', '6', '100' ], [ 'Dan', '2', '800' ], [ 'Tom', '6', '500' ], [ 'team10', '2', '222' ], [ 'team9', '2', '222' ]];

arr.sort(function (a, b) {
var aa = a[0].split(/(\d+)/g),
bb = b[0].split(/(\d+)/g);

return b[1] - a[1] ||
b[2] - a[2] ||
aa[0].localeCompare(bb[0]) || aa[1] - bb[1];
});

console.log(arr);

关于javascript - 按数字和字典顺序对多维数组进行排序javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38560285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com