JavaScript:对多维数组进行排序

14

我有一个多维数组,它有三列(使用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

可能是重复的问题: https://dev59.com/6HE85IYBdhLWcg3wbS1h - DhruvPathak
如何在 JavaScript 中按多列对多维数组进行排序 - DhruvPathak
6个回答

20

如先前所述,您应该使用自定义排序函数。下面是一个完全符合您要求的示例。

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;
});

这个算法有名字吗? - Matías Insaurralde
1
@MatíasInsaurralde 上面的代码只是为了返回比较结果 - 这里是数组排序方法的文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort - Bojan Bjelic

7
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;
});

1
这是一个通用函数。
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;
  }
);
}

1
为了对多维数组进行排序,首先按坐标0进行比较,然后按组件2进行比较,您可以使用两个比较函数结合使用||:

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

对于数字值,只需将差异用作比较函数,如x-y
  • 如果x == y,则为0
  • 如果x > y,则为>0
  • 如果x < y,则为<0
调整差异元素的顺序以处理升序/降序。

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));


0

另一种方法是为每个数组条目创建一个值,例如1000 * 票数 + 候选人编号,以使该值明确且唯一,例如我们得到1003、1002、5、4、1。添加一个键引用回原始数组并进行排序。

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

您的排序系统存在差异,您使用高->低的方式进行投票,而使用低->高的方式进行候选人编号。


0
据我所知,您将不得不编写自己的排序函数。
如果您可以将其存储在对象中,则定义一个类似于先前答案中的函数即可完成工作。
请参阅 对象数组排序

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接