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是否为此提供了任何方法?
当前回答
根据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
其他回答
如果您希望检查对象数组的相等性和顺序并不重要,即。
areEqual ([{id:“0”},{id: " 1 "}], [{id: " 1 "}, {id: " 0 "})) / /真实的
首先要对数组进行排序。lodash有你需要的所有工具,通过组合sortBy和isEqual:
// arr1 & arr2: Arrays of objects
// sortProperty: the property of the object with which you want to sort
// Note: ensure every object in both arrays has your chosen sortProperty
// For example, arr1 = [{id: "v-test_id0"}, {id: "v-test_id1"}]
// and arr2 = [{id: "v-test_id1"}, {id: "v-test_id0"}]
// sortProperty should be 'id'
function areEqual (arr1, arr2, sortProperty) {
return _.areEqual(_.sortBy(arr1, sortProperty), _.sortBy(arr2, sortProperty))
}
编辑:由于sortBy返回一个新数组,在排序之前不需要克隆数组。原始数组不会被改变。
注意,对于lodash的isEqual,顺序很重要。如果sortBy没有首先应用于每个数组,上面的例子将返回false。
这种方法很糟糕,但我把它留在这里作为参考,所以其他人会避免这种方法:
使用@ninjagecko的选项1最适合我:
Array.prototype.equals = function(array) {
return array instanceof Array && JSON.stringify(this) === JSON.stringify(array) ;
}
a = [1, [2, 3]]
a.equals([[1, 2], 3]) // false
a.equals([1, [2, 3]]) // true
它还将处理null和未定义的情况,因为我们将它添加到数组的原型中,并检查另一个参数是否也是一个数组。
在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。
即使这看起来超级简单,但有时它真的很有用。如果你所需要的只是看看两个数组是否有相同的项,并且它们的顺序相同,试试这个:
[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
这取决于你需要什么。
var a= [1, 2, 3, '3'];
var b = [1, 2, 3];
var c = a.filter(function (i) { return ! ~b.indexOf(i); });
alert(c.length);