我需要一个compareFunction
,它将在下面使用,数组根本不会改变。
我提供的代码非常适合Mozilla,但不适用于Chrome。
在Chrome上运行代码段,您会看到array2
(超过10个对象)的订单已更改。
如何为Chrome实现保留订单?
我不需要任何排序,因为我已经知道我的数组将被排序。
function compareFunction(direction, a, b){
return 0;
}
var array1 = [1,2,3,4,5,6,7,8,'x',10];
array1.sort((a,b)=>{return compareFunction.call(null, 'asc', a, b)});
console.log(array1.toString());
var array2 = [1,2,3,4,5,6,7,8,'x',10,11];
array2.sort((a,b)=>{return compareFunction.call(null, 'asc', a, b)});
console.log(array2.toString());

答案 0 :(得分:0)
比较器功能中选择a
和b
的顺序依赖于实现。在chrome中,如果项目的长度超过10
,它会快速排序,这就是为什么它在6
之前选择2
进行比较。
而不是this
,传递实际数组并比较原始数组中参数的索引位置。
您需要通过执行array.slice()
复制原始数组,以便在排序时不会发生变异。
function compareFunction(a,b){
return this.indexOf(a) - this.indexOf(b);
}
var array1 = [1,2,3,4,5,6,7,8,'x',10];
array1 = array1.slice().sort(function(a,b){return compareFunction.call(array1,a,b)});
console.log(array1);
var array2 = [1,2,3,4,5,6,7,8,'x',10,11];
array2 = array2.slice().sort(function(a,b){return compareFunction.call(array2,a,b)});
console.log(array2);
答案 1 :(得分:0)
像这样的东西
var arr1 = [1,2],
arr2 = [1,2,3],
arr3 = [1,2,3],
arr4 = [3,2,1];
function compare(a, b) {
if(a.length != b.length) return false;
for(var i = 0; i < a.length; i++) {
if(a[i] != b[i]) return false;
}
return true;
}
console.log(compare(arr1, arr2)); // false
console.log(compare(arr2, arr3)); // true
console.log(compare(arr3, arr4)); // false