复制 Excel 对 JS 的排序的最佳方法是什么?
假设我有一个包含项目的数组:
[6,0.75]
[6,0.81]
[9,0.75]
[4,0.20]
按第一个键对它们进行排序很容易,但是如何复制“然后按”排序?Excel 将使用第一个键 desc 和第二个键 desc 吐出以下结果:
[9,0.75]
[6,0.81]
[6,0.75]
[4,0.20]
复制 Excel 对 JS 的排序的最佳方法是什么?
假设我有一个包含项目的数组:
[6,0.75]
[6,0.81]
[9,0.75]
[4,0.20]
按第一个键对它们进行排序很容易,但是如何复制“然后按”排序?Excel 将使用第一个键 desc 和第二个键 desc 吐出以下结果:
[9,0.75]
[6,0.81]
[6,0.75]
[4,0.20]
对于给定的示例,有更简单的方法可以做到这一点,但在一般情况下,您可以将一个函数传递给 sort 方法,该方法将按指定顺序比较每对值。(jsfiddle)
var arr1 = [[6, 0.75], [6, 0.81], [9, 0.75], [4, 0.20]],
arr2 = [[6, 0.75], [6, 0.81], [9, 0.75], [4, 0.20]],
people = [{name: 'Jim', age: 40}, {name: 'Sally', age: 35},
{name: 'Tim', age: 20}, {name: 'Jim', age: 72}];
function orderedComparison(indices) {
return function(a, b) {
for (var i = 0; i < indices.length; i++) {
if (a[indices[i]] > b[indices[i]]) return 1;
if (a[indices[i]] < b[indices[i]]) return -1;
// (if a == b, check next index)
}
}
}
// sort by first item in each pair, then 2nd
arr1.sort(orderedComparison([0, 1]));
console.log(arr1);
// sort by 2nd item then 1st
arr2.sort(orderedComparison([1, 0]));
console.log(arr2);
people.sort(orderedComparison(['name', 'age']));
console.log(people);
请注意,以下内容(首先按优先级较低的键然后按优先级较高的键排序)可能会起作用,但不能保证。
arr1.sort(function(a, b) {return a[1] - b[1]});
arr1.sort(function(a, b) {return a[0] - b[0]});
您可以通过缩放每个子索引来复制此功能,以便它们的大小不会重叠并使用标准比较Array.sort();
这个 jsfiddle 演示了它:http: //jsfiddle.net/Jd2ne/2/
提示:如果你不知道量级是多少,当你用科学计数法写出数字时,它是十的指数。即:6 = 6 * 10^0 => 6 的大小为零。