javascript中数组的比较

Shr*_*har 6 javascript arrays

我有两个阵列说a = [1,2,3]b=[1,2,3]

如果我这样做(a==b)会返回false.如何比较两个具有相同值的数组?

a[0]==b[0] 将返回true,但是如何在两个不同的数组中比较两个数组而不是两个相同的元素?

ale*_*nst 6

你有2个选择.

Fisrt one是使用自己制作的某种函数,它将迭代两个数组中的每个键并进行比较.

第二个选项是使用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
Run Code Online (Sandbox Code Playgroud)

请注意,顺序在对象中无关紧要,因此您可以拥有

var a = {'a' : '1', 'b' : '2', 'c' : '3'};
var b = {'c' : '3', 'b' : '2', 'a' : '1'}
_.isEqual(a, b) // --> also true
Run Code Online (Sandbox Code Playgroud)


Tre*_*vor 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;
}
Run Code Online (Sandbox Code Playgroud)

  • `array_compare([1,2,3,{a:1,b:2}],[1,2,3,{a:1,b:2}])`返回`false`,所以我想这个仅适用于包含原始值的数组. (2认同)

Jas*_*ies 6

如果你知道你的阵列中有什么(不),你可以使用join:

a.join() == b.join()
Run Code Online (Sandbox Code Playgroud)

我知道,这远非防弹,但它可以在某些情况下使用(当你知道两个阵列中的顺序相同时).

  • 但是这个怎么样?`["a,b"].join()== ["a","b"].join()` (2认同)

Koo*_*Inc 2

如果你想比较2个数组,你可以使用JSON.stringify

JSON.stringify([1,2,3]) === JSON.stringify([1,2,3]); //=> true
Run Code Online (Sandbox Code Playgroud)

它还将比较数组中的[嵌套]对象,或数组中的[嵌套]数组:

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
Run Code Online (Sandbox Code Playgroud)

这个 jsfiddle中,我玩了一下这个想法

  • 如果对象包含相等的键:值对但顺序不同,则此方法将不起作用。您无法比较将对象转换为字符串的对象。那是自找麻烦。 (5认同)