【问题标题】:Javascript: Sort Multidimensional ArrayJavascript:对多维数组进行排序
【发布时间】:2011-10-23 00:37:28
【问题描述】:

我有一个多维数组,它有 3 列(通过使用 javascript)

[0] Number of vote
[1] Name of candidate
[2] Candidate Number

我的数组内容是:

1 | Peter | 3
1 | Mary  | 2
0 | David | 5
0 | John  | 4
0 | Billy | 1

如何按 [0] 投票数 然后按 [2] 候选号码 对数组进行排序?

结果应该是:

1 | Mary  | 2
1 | Peter | 3
0 | Billy | 1
0 | John  | 4
0 | David | 5

【问题讨论】:

标签: javascript arrays sorting multidimensional-array


【解决方案1】:
array.sort( function (a,b) {
    if (a[0] > b[0]) return  1;
    if (a[0] < b[0]) return -1;
    if (a[2] > b[2]) return  1;
    if (a[2] < b[2]) return -1;
    return 0;
});

【讨论】:

    【解决方案2】:

    据我所知,您必须创建自己的排序功能。
    如果您可以将其存储在一个对象中,而不是像上一个答案那样定义一个函数就可以完成这项工作。
    参考Sort array of objects

    【讨论】:

      【解决方案3】:

      如前所述,您应该使用自定义排序功能。这是一个可以完全满足您的要求。

      var arr = [];
      arr[0] = [1, 'Peter', 3];
      arr[1] = [1, 'Mary', 2];
      arr[2] = [0, 'David', 5];
      arr[3] = [0, 'John', 4];
      arr[4] = [0, 'Billy', 1];
      
      arr.sort(function (a,b) {
          if (a[0] < b[0]) return  1;
          if (a[0] > b[0]) return -1;
          if (a[2] > b[2]) return  1;
          if (a[2] < b[2]) return -1;
          return 0;
      });
      

      【讨论】:

      【解决方案4】:

      这是一个通用函数

      function arraySort(pArray)
      {
      pArray.sort(
        function(a,b)
        {
          var len=a.length;
          for (var i=0;i<len;i++)
          {
            if (a[i]>b[i]) return 1;
            else if (a[i]<b[i]) return -1;
          }
          return 0;
        }
      );
      }
      

      【讨论】:

        【解决方案5】:

        另一种方法是为每个数组条目创建一个值,例如1000*票数+候选人数,这样这个值是明确和唯一的,例如我们得到 1003, 1002, 5, 4, 1。添加一个引用回原始数组的键并排序。

        所以我们将按每个子数组的第一个元素对 [[1003,0],[1002,1],[5,2],[4,3],[1,4]] 进行排序。

        您的排序系统存在差异,您使用 high->low 表示选票,使用 low-high 表示候选人编号。

        【讨论】:

          【解决方案6】:

          要对多维数组进行排序,首先按坐标 0 进行比较,然后按分量 2 进行比较,您可以将两个比较函数与 || 结合使用:

          比较0坐标||比较2坐标

          对于数值,只需使用差异作为比较函数,x - y 是:

          • 0 如果x == y
          • >0 如果x &gt; y
          • x < y

          调整差异中元素的顺序以照顾升序/降序。

          var myArray = [
            [1, 'Peter', 3],
            [1, 'Mary', 2],
            [0, 'David', 5],
            [0, 'John', 4],
            [0, 'Billy', 1]
          ];
          
          myArray.sort(function(a, b) {
            return b[0] - a[0] || a[2] - b[2];
          });
          
          console.log(JSON.stringify(myArray));

          【讨论】:

            猜你喜欢
            • 2012-11-27
            • 2017-11-09
            • 1970-01-01
            • 2010-10-13
            • 1970-01-01
            • 2015-05-12
            相关资源
            最近更新 更多