排序方法无法正常处理大量元素

时间:2018-06-03 14:20:08

标签: javascript jquery

我有一个由大约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个元素的前一个数组,则会显示奇怪的结果。

2 个答案:

答案 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