var a = [1, 2, 3];
var b = [3, 2, 1];
var c = new Array(1, 2, 3);

alert(a == b + "|" + b == c);

demo

如何检查这些数组是否相等,并获得一个方法,如果它们相等,则返回true ?

jQuery是否为此提供了任何方法?


当前回答

即使这看起来超级简单,但有时它真的很有用。如果你所需要的只是看看两个数组是否有相同的项,并且它们的顺序相同,试试这个:

[1, 2, 3].toString() == [1, 2, 3].toString()
true
[1, 2, 3,].toString() == [1, 2, 3].toString()
true
[1,2,3].toString() == [1, 2, 3].toString()
true

然而,这并不适用于模式高级情况,如:

[[1,2],[3]].toString() == [[1],[2,3]].toString()
true

这取决于你需要什么。

其他回答

根据Tim James的回答和Fox32的评论,下面应该检查空值,假设两个空值不相等。

function arrays_equal(a,b) { return !!a && !!b && !(a<b || b<a); }

> arrays_equal([1,2,3], [1,3,4])
false
> arrays_equal([1,2,3], [1,2,3])
true
> arrays_equal([1,3,4], [1,2,3])
false
> arrays_equal(null, [1,2,3])
false
> arrays_equal(null, null)
false

jQuery没有比较数组的方法。然而,下划线库(或类似的Lodash库)确实有这样一个方法:isEqual,它也可以处理各种其他情况(如对象字面量)。坚持提供的例子:

var a=[1,2,3];
var b=[3,2,1];
var c=new Array(1,2,3);

alert(_.isEqual(a, b) + "|" + _.isEqual(b, c));

顺便说一句:下划线还有很多jQuery没有的方法,所以它是jQuery的一个很好的补充。

编辑:正如评论中所指出的,现在只有当两个数组的元素顺序相同时,上述方法才有效,即:

_.isEqual([1,2,3], [1,2,3]); // true
_.isEqual([1,2,3], [3,2,1]); // false

幸运的是,Javascript有一个内置的方法来解决这个问题,sort:

_.isEqual([1,2,3].sort(), [3,2,1].sort()); // true

在JavaScript 1.6版中,这很简单:

Array.prototype.equals = function( array ) {
  return this.length == array.length && 
         this.every( function(this_i,i) { return this_i == array[i] } )  
  }

例如,[].equals([])给出true,而[1,2,3]。Equals([1,3,2])产生false。

对于数字和字符串等原始值,这是一个简单的解决方案:

a = [1,2,3]

b = [3,2,1]

a.sort().toString() == b.sort().toString() 

调用sort()将确保元素的顺序无关紧要。toString()调用将创建一个值以逗号分隔的字符串,以便可以测试两个字符串是否相等。

var a= [1, 2, 3, '3'];
var b = [1, 2, 3];

var c = a.filter(function (i) { return ! ~b.indexOf(i); });

alert(c.length);