【问题标题】: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;
});
【解决方案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 > 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));