Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-嵌套数组排序不';I don’我没有按预期工作_Javascript_Arrays_Angularjs_Sorting_Multidimensional Array - Fatal编程技术网

Javascript-嵌套数组排序不';I don’我没有按预期工作

Javascript-嵌套数组排序不';I don’我没有按预期工作,javascript,arrays,angularjs,sorting,multidimensional-array,Javascript,Arrays,Angularjs,Sorting,Multidimensional Array,这个问题看起来很愚蠢,但我无法找出我做错了什么 我正在尝试根据特定索引对嵌套数组进行排序。如果我一直对数组进行排序,那么数组每次都会发生变化,这本不应该发生。此外,当阵列长度稍小时,不会再现此问题 // Code goes here var app = angular.module("myApp", []); app.controller("someController", ['$scope', function($scope) { $scope.AppTitle = "Array sor

这个问题看起来很愚蠢,但我无法找出我做错了什么

我正在尝试根据特定索引对嵌套数组进行排序。如果我一直对数组进行排序,那么数组每次都会发生变化,这本不应该发生。此外,当阵列长度稍小时,不会再现此问题

// Code goes here
var app = angular.module("myApp", []);

app.controller("someController", ['$scope', function($scope) {
  $scope.AppTitle = "Array sort Issue";

  $scope.testArray = [
    ["2016-04-10T18:30:00.000Z", "b20", 104],
    ["2016-04-10T18:30:00.000Z", "b20", 81],
    ["2016-04-10T18:30:00.000Z", "b20", 29],
    ["2016-04-10T18:30:00.000Z", "b20", 1],
    ["2016-04-10T18:30:00.000Z", "n0c", 155],
    ["2016-04-10T18:30:00.000Z", "n0c", 21],
    ["2016-04-10T18:30:00.000Z", "n0c", 12],
    ["2016-04-10T18:30:00.000Z", "n0c", 10],
    ["2016-04-10T18:30:00.000Z", "n0c", 8],
    ["2016-04-10T18:30:00.000Z", "n0c", 8],
    ["2016-04-10T18:30:00.000Z", "ecty", 101],
    ["2016-04-10T18:30:00.000Z", "ecty", 58],
    ["2016-04-10T18:30:00.000Z", "adgi", 127],
    ["2016-04-10T18:30:00.000Z", "adgi", 24],
    ["2016-04-10T18:30:00.000Z", "ath", 77],
    ["2016-04-10T18:30:00.000Z", "ath", 60],
    ["2016-04-10T18:30:00.000Z", "hry", 124],
    ["2016-04-10T18:30:00.000Z", "hry", 8],
    ["2016-04-10T18:30:00.000Z", "tfan", 132],
    ["2016-04-10T18:30:00.000Z", "sr", 96],
    ["2016-04-10T18:30:00.000Z", "hwdg", 59],
    ["2016-04-10T18:30:00.000Z", "hwdg", 15],
    ["2016-04-10T18:30:00.000Z", "hwdg", 14],
    ["2016-04-10T18:30:00.000Z", "hwdg", 6],
    ["2016-04-10T18:30:00.000Z", "alub", 88],
    ["2016-04-10T18:30:00.000Z", "ax0", 43],
    ["2016-04-10T18:30:00.000Z", "ax0", 40],
    ["2016-04-10T18:30:00.000Z", "ax0", 4],
    ["2016-04-10T18:30:00.000Z", "ax0", 1],
    ["2016-04-10T18:30:00.000Z", "voin", 67],
    ["2016-04-10T18:30:00.000Z", "voin", 19],
    ["2016-04-10T18:30:00.000Z", "voin", 2],
    ["2016-04-10T18:30:00.000Z", "p", 87],
    ["2016-04-10T18:30:00.000Z", "ttm", 65],
    ["2016-04-10T18:30:00.000Z", "ttm", 18],
    ["2016-04-10T18:30:00.000Z", "bre", 78],
    ["2016-04-10T18:30:00.000Z", "bre", 1],
    ["2016-04-10T18:30:00.000Z", "dew", 41],
    ["2016-04-10T18:30:00.000Z", "dew", 33],
    ["2016-04-10T18:30:00.000Z", "cgu", 19],
    ["2016-04-10T18:30:00.000Z", "cgu", 15],
    ["2016-04-10T18:30:00.000Z", "cgu", 13],
    ["2016-04-10T18:30:00.000Z", "cgu", 6],
    ["2016-04-10T18:30:00.000Z", "cgu", 4],
    ["2016-04-10T18:30:00.000Z", "cgu", 4],
    ["2016-04-10T18:30:00.000Z", "cgu", 3],
    ["2016-04-10T18:30:00.000Z", "cgu", 3],
    ["2016-04-10T18:30:00.000Z", "cgu", 1],
    ["2016-04-10T18:30:00.000Z", "cgu", 1],
    ["2016-04-10T18:30:00.000Z", "cgu", 1],
    ["2016-04-10T18:30:00.000Z", "an", 69],
    ["2016-04-10T18:30:00.000Z", "hwo", 69],
    ["2016-04-10T18:30:00.000Z", "camel", 68],
    ["2016-04-10T18:30:00.000Z", "mysore", 67],
    ["2016-04-10T18:30:00.000Z", "power", 60],
    ["2016-04-10T18:30:00.000Z", "power", 2],
    ["2016-04-10T18:30:00.000Z", "www", 49],
    ["2016-04-10T18:30:00.000Z", "www", 10],
    ["2016-04-10T18:30:00.000Z", "hgyp", 35],
    ["2016-04-10T18:30:00.000Z", "hgyp", null],
    ["2016-04-10T18:30:00.000Z", "hgyp", 4],
    ["2016-04-10T18:30:00.000Z", "igne", 43],
    ["2016-04-10T18:30:00.000Z", "igne", 13],
    ["2016-04-10T18:30:00.000Z", "weight", 54],
    ["2016-04-10T18:30:00.000Z", "hbk", 50]
  ]

  $scope.sortTable = function() {
    $scope.testArray.sort(function(a, b) {
      if (a[1] > b[1])
        return 1;
      if (b[1] > a[1])
        return -1;
      return 0;
    });
  }
}]);
在plunker@

向下滚动并单击sortMe按钮。您可以在每次单击按钮时看到表行中的更改


提前谢谢。你会停止我的痛苦;)

您在Plunker上的代码运行正常,请再次检查,因为我在单击sortMe按钮后未发现任何更改

要获得稳定排序,您需要另一个参数,如第三个元素

排序只使用部分数据进行检查,比如回调。如果一个检查返回
0
,由于内容相同,排序算法不知道a是在b之前还是在b之前。在这种情况下,我们需要另一个属性来决定结果应该在哪个范围内输出。欲了解更多详细信息,请访问


您想要一个已排序的副本?如果数组已经排序,为什么再次排序会得到不同的结果?它的排序a到z升序有什么不对?它是从a到z排序。但是如果你注意到最后一列,你可以看到一个变化。(power,60)和(power,2)行在每次单击排序按钮时都会不断交换。您可以看到更改。(power,60)和(power,2)行在每次单击排序按钮时不断交换。您仅对元素[1]进行排序,即“power”,为什么您认为元素[2]需要排序或不需要交换?这应该是一个注释,而不是答案@霍尔格:嗯,是的。我正在对元素[1]进行排序。当我给用户一个选项来根据任何列进行排序时。在同一列上单击两次不应呈现不同的表。基本上,如果表已经排序,那么再次更改排序结果是没有意义的。这就是排序算法的行为。如果sortkey不明确,则一个密钥的成员完全是随机的。感谢您的解决方案。它解决了这个问题。你能详细说明一下你的答案吗?为什么会发生这种情况?@Sanjay你的代码不关心最后一项。JS排序算法(在我的例子中是V8)不关心相等键之间的排序。我猜由于内部工作,它会将后来找到的项带到具有相同键值的组的前面。因此,每次按“排序”时,后面的一个会移到前面。为了防止这种情况发生,您必须告诉排序函数也要考虑最后一项。就像尼娜在编码时做的那样。如果
a[1].localeCompare(b[1])
返回
0
(比较的a[1]项相同),则检查
a[2]
项。
$scope.testArray.sort(function (a, b) {
    return a[1].localeCompare(b[1]) || a[2] - b[2];
});