我有一个由大约20个值组成的数组,如下所示,
var myArray = [
["2017-01", "Female", "671950.00"],
["2017-01", "Male", "322800.00"],
["2017-02", "Male", "323977.00"],
["2017-02", "Female", "671375.00"],
["2017-03", "Male", "326515.00"],
["2017-03", "Female", "683646.00"],
["2017-04", "Male", "326642.00"],
["2017-04", "Female", "684820.00"],
["2017-05", "Female", "687627.00"],
["2017-05", "Male", "330966.00"],
["2017-06", "Male", "330290.00"],
["2017-06", "Female", "686022.00"],
["2017-07", "Male", "326663.00"],
["2017-07", "Female", "679277.00"],
["2017-08", "Female", "684451.00"],
["2017-08", "Male", "329804.00"],
["2017-09", "Female", "686584.00"],
["2017-09", "Male", "330300.00"],
["2017-10", "Female", "658154.00"],
["2017-10", "Male", "316671.00"]
];
我将上面的代码与数组的第一个元素分组,数组的第二个元素也按照组排序。 为此,我编写了下面的代码,但这对于数组中的十个元素只能正常工作,如下所示,
var myArray = [
["2017-01", "Female", "671950.00"],
["2017-01", "Male", "322800.00"],
["2017-02", "Male", "323977.00"],
["2017-02", "Female", "671375.00"],
["2017-03", "Male", "326515.00"],
["2017-03", "Female", "683646.00"],
["2017-04", "Male", "326642.00"],
["2017-04", "Female", "684820.00"],
["2017-05", "Female", "687627.00"],
["2017-05", "Male", "330966.00"],
];
myArray = myArray.sort(function (a, b) {
return a[0] == b[0] && a[1] > b[1];
});
如果我使用包含20个元素的前一个数组,则会显示奇怪的结果。
答案 0 :(得分:1)
您可以使用localeCompare()
来比较字符串
var myArray = [
["2017-01", "Female", "671950.00"],
["2017-01", "Male", "322800.00"],
["2017-02", "Male", "323977.00"],
["2017-02", "Female", "671375.00"],
["2017-03", "Male", "326515.00"],
["2017-03", "Female", "683646.00"],
["2017-04", "Male", "326642.00"],
["2017-04", "Female", "684820.00"],
["2017-05", "Female", "687627.00"],
["2017-05", "Male", "330966.00"],
["2017-06", "Male", "330290.00"],
["2017-06", "Female", "686022.00"],
["2017-07", "Male", "326663.00"],
["2017-07", "Female", "679277.00"],
["2017-08", "Female", "684451.00"],
["2017-08", "Male", "329804.00"],
["2017-09", "Female", "686584.00"],
["2017-09", "Male", "330300.00"],
["2017-10", "Female", "658154.00"],
["2017-10", "Male", "316671.00"]
];
myArray.sort((a, b) => {
if (a[0] !== b[0]) return a[0].localeCompare(b[0]); //If first element is not the same, compare the first element
return a[1].localeCompare(b[1]); //Compare the second element since the first element is the same
});
console.log(myArray);
Doc:localeCompare()
答案 1 :(得分:1)
通过以下方式更改排序逻辑,看它能完美运行。
var sortedArray = myArray.sort(function (a, b) {
return a > b ? 1 : -1;
});
请参阅演示:JSFiddle