我有两个数组说a = [1,2,3]
和b=[1,2,3]
如果我这样做(a==b)
,它会返回 false。如何比较具有相同值的两个数组?
a[0]==b[0]
将返回 true,但我们如何比较两个数组而不是两个不同数组中的 2 个相同元素?
我有两个数组说a = [1,2,3]
和b=[1,2,3]
如果我这样做(a==b)
,它会返回 false。如何比较具有相同值的两个数组?
a[0]==b[0]
将返回 true,但我们如何比较两个数组而不是两个不同数组中的 2 个相同元素?
您有 2 个选项。
第一个是使用自己制作的某种函数,它将遍历两个数组中的每个键并比较它们。
第二个选项是使用isEqual
from _.underscore
(一个非常好的 JS 库,http://underscorejs.org/#isEqual)这将适用于数组和对象。
我会使用第二个,因为它更容易。
var a = {'a' : '1', 'b' : '2', 'c' : '3'};
var b = {'a' : '1', 'b' : '2', 'c' : '3'};
_.isEqual(a, b) // --> true
请注意,对象中的顺序无关紧要,因此您可以
var a = {'a' : '1', 'b' : '2', 'c' : '3'};
var b = {'c' : '3', 'b' : '2', 'a' : '1'}
_.isEqual(a, b) // --> also true
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;
}
(a==b)
正在做参考比较而不是内容比较。
Underscore.js为此带来了一些功能。
如果要比较 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
在这个 jsfiddle中,我对这个想法进行了一些尝试
您必须编写代码来比较数组的每个元素以实现您的目标。
// 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;
}