即使具有相同的值,排序后的数组也不相同

Arrays are not identical after sorting even with identical values

本文关键字:数组 排序      更新时间:2023-09-26
var a = [1,2,3]
var b = a.sort();
console.log('a',a,'b',b); // a [1,2,3] b [1,2,3]
console.log(a === b); // true
a = [1,3,2];
console.log(a.sort() === b) // false
console.log('a',a,'b',b); // a [1,2,3] b [1,2,3]
console.log(a === b) // false

我的问题是——为什么?[我得到了两个错误。]还有一点,原始数组可以保持不变,比如一些参数或者其他排序函数?

我的意思是:

var a = [1,3,2]; 
var b = a.SomeOtherSortFn();
console.log('a',a,'b',b); // a [1,3,2] b [1,2,3]

Edit:我的目标不是检查数组是否相等。比较长度,循环遍历值-没什么大不了的。我的问题是,为什么一开始相同的数组在第二遍就不一样了。

我知道答案了,谢谢你Arun Ghosh

比较两个数组时,如果它们引用同一对象,则返回值为true。不比较数组的值或内容

我不太清楚你使用的是哪个数字,但我猜你必须使用可选参数compareFunction:(你可以在这里阅读完整的指南)

var arr = [ 40, 1, 5, 200 ];
function comparar ( a, b ){ return a - b; }
arr.sort( comparar );  // [ 1, 5, 40, 200 ]

因为如果你不使用它,你会得到这个:(数字按unicode排序)

var arr = [ 40, 1, 5, 200 ];
arr.sort();  //[ 1, 200, 40, 5 ]