Javascript 复制Excel';s";按“排序”&引用;然后是;行为

Javascript 复制Excel';s";按“排序”&引用;然后是;行为,javascript,arrays,sorting,Javascript,Arrays,Sorting,复制Excel对JS的排序的最佳方法是什么 假设我有一个包含项的数组: [6,0.75] [6,0.81] [9,0.75] [4,0.20] 按第一个键对它们进行排序很容易,但如何“然后按”排序进行复制呢?Excel将使用第一个键和第二个键显示以下结果: [9,0.75] [6,0.81] [6,0.75] [4,0.20] 您可以通过缩放每个子索引来复制此功能,使其大小不重叠,并使用Array.sort()进行标准比较 这个JSFIDLE演示了它: 提示:如果你不知道震级是多少,当你用科

复制Excel对JS的排序的最佳方法是什么

假设我有一个包含项的数组:

[6,0.75]
[6,0.81]
[9,0.75]
[4,0.20]
按第一个键对它们进行排序很容易,但如何“然后按”排序进行复制呢?Excel将使用第一个键和第二个键显示以下结果:

[9,0.75]
[6,0.81]
[6,0.75]
[4,0.20]

您可以通过缩放每个子索引来复制此功能,使其大小不重叠,并使用
Array.sort()进行标准比较

这个JSFIDLE演示了它:


提示:如果你不知道震级是多少,当你用科学记数法写出数字时,它是十的指数。例如:6=6*10^0=>6的大小为零。

对于给定的示例,有更简单的方法可以做到这一点,但在一般情况下,您可以将函数传递给排序方法,该方法将按指定顺序比较每对值。()


在对“2D数组”进行排序时,使用本机JS
Array.sort
方法也会得到相同的结果<如果代码>排序在第一个索引处满足两个相等的值,它将深入到内部数组。我认为您可以通过表示一个4x4数组来改进您的问题,然后要求按照3、0、2、1的顺序进行排序。是的,这是正确的。如果你想让这种方法处理非数字输入,你必须将输入转换成数字,但这就是常规排序的工作方式,唯一的区别是你必须自己分配数字值来表示不同的输入。我认为这与Excel的
排序方式…然后按
完全相同+1:)@Teemu或多或少,但如果在同一个字段中同时包含文本和数字,则行为将与Excel不同(Excel将任何文本视为<任何数字)。是的,JS使用ASCII顺序,但在需要时很容易在函数中更改。谢谢,我将使用它:)。事实上,根据JS,以下没有一个是正确的:0>'a',0<'a',0='a'。因此,我的排序函数不能很好地处理同一“列”中的混合类型,但可以根据需要进行调整。
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]});