我有两个阵列说a = [1,2,3]
和b=[1,2,3]
如果我(a==b)
,则返回false。如何比较两个具有相同值的数组?
a[0]==b[0]
将返回true,但是如何在两个不同的数组中比较两个数组而不是两个相同的元素呢?
答案 0 :(得分:6)
您有2个选项。
Fisrt one是使用自己制作的某种函数,它将迭代两个数组中的每个键并进行比较。
第二个选项是使用来自isEqual
的{{1}}(一个非常好的JS库,http://underscorejs.org/#isEqual)
这适用于数组和对象。
我会使用第二个,因为它更容易。
_.underscore
请注意,顺序在对象中无关紧要,因此您可以
var a = {'a' : '1', 'b' : '2', 'c' : '3'};
var b = {'a' : '1', 'b' : '2', 'c' : '3'};
_.isEqual(a, b) // --> true
答案 1 :(得分:6)
function array_compare(a, b)
{
// if lengths are different, arrays aren't equal
if(a.length != b.length)
return false;
for(i = 0; i < a.length; i++)
if(a[i] != b[i])
return false;
return true;
}
答案 2 :(得分:6)
答案 3 :(得分:2)
(a==b)
正在进行参考比较而非内容比较。
Underscore.js为此带来了一些功能。
答案 4 :(得分:2)
如果要比较2个数组,可以使用JSON.stringify
JSON.stringify([1,2,3]) === JSON.stringify([1,2,3]); //=> true
它还会比较数组中的[嵌套]对象,或数组中的[嵌套]数组:
JSON.stringify([1,2,3,{a:1,b:2}]) ===
JSON.stringify([1,2,3,{'a':1,b:2}]); //=> true
JSON.stringify([1,2,3,{a:1,b:2,c:{a:1,b:2}}]) ===
JSON.stringify([1,2,3,{'a':1,b:2,c:{a:1,b:2}}]); //=> true
JSON.stringify([1,2,3,{a:1,b:2,c:[4,5,6,[7,8,9]]}]) ===
JSON.stringify([1,2,3,{'a':1,b:2,c:[4,5,6,[7,8,9]]}]); //=> true
在this jsfiddle中,我有点想法
答案 5 :(得分:1)
尝试使用javascripts Join() 方法将两个数组转换为字符串,然后对字符串进行压缩:
Join(): The string conversions of all array elements are joined into one string.
var a1 = array1.join();
var a2 = array2.join();
if(a1 == a2){
//do something
}
答案 6 :(得分:1)
您必须编写代码来比较数组的每个元素以实现您的目标。
// this is one way of doing it, and there are caveats about using instanceOf.
// Its just one example, and presumes primitive types.
function areArrayElementsEqual(a1, a2)
{
if (a1 instanceof Array) && (a2 instanceof Array)
{
if (a1.length!=a2.length)
return false;
else{
var x;
for (x=0;x<a1.length; x++)
if (a1[x]!=a2[x])
return false;
}
}
return true;
}
答案 7 :(得分:0)