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是否为此提供了任何方法?
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);