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

时间:2016-10-18 09:57:37

标签: javascript arrays sorting

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

我的问题是 - 为什么? [我得到2倍假。] 另外一个 - 原始阵列可能不受影响,可能是一些参数或其他排序功能?

我的意思是:

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

编辑:我的目标不是检查数组是否相等。比较长度,循环通过值 - 没什么大不了的。我的问题是 - 为什么第一个相同的数组在第二个数据中不相同。

我得到了答案,谢谢Arun Ghosh。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:-1)

不太清楚你正在使用哪些数字,但我想你必须使用可选参数compareFunction :(你可以阅读完整指南here

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 ]