2015-06-09 2 views
0

У меня есть два одинаковых массива, и я хочу, чтобы увидеть, если он равен и возвращает истинуСравнение идентичных массивов в Javascript

вар а = [1,2];

var b = [1,2];

если (а === б) { возвращающие }

эти два массива, очевидно, идентичны, но я получаю не равны. Может ли кто-нибудь объяснить, почему и если есть простой способ сравнить эти два?

+0

Там массивы не идентичны, хотя они структурно эквивалентны. – rightfold

+0

Вы сравниваете ссылку на массив, который в вашем случае отличается, поскольку они представляют собой два разных массива, которые имеют похожие данные. См. Http://stackoverflow.com/questions/7837456/comparing-two-arrays-in-javascript о том, как сравнить их значения. – ericosg

ответ

0

Самый простой способ будет использовать утилиту библиотеки как lodash _.difference

0

попробовать это:

function arraysEqual(arr1, arr2) { 
    if(arr1.length !== arr2.length) 
     return false; 
    for(var i = arr1.length; i--;) { 
     if(arr1[i] !== arr2[i]) 
      return false; 
    } 
    return true; 
} 
1

Проблема заключается в том, вы создаете две различные массивы и === проверить, имеют ли же ссылку как a и b. Следовательно, ваше состояние терпит неудачу. Для сравнения массива нет встроенного кода, однако для него существуют библиотеки. Но вы просто пишете функцию для сравнения массивов путем циклирования.

1

1. Никогда не используйте == оператор

Она не делает то, что вы думаете, и это довольно близко, чтобы быть совершенно бесполезным (например "1" == [[1]]). Предпочитают вместо этого ===. Если тип один и тот же для обеих сторон == и === делают то же самое, но если они не ==, вы будете сожалеть об этом.

2. === для массивов проверок идентичности

И.Э. он вернет true только в том случае, если обе стороны являются одним и тем же объектом, а не объектом с одним и тем же содержимым (что бы то ни было «должно быть»).

Если вы хотите, чтобы проверить содержание сначала вы должны решить, как сравнить элементы ... например

my_eqtest([1, [2, 3]], [1, [2, 3]]) 

должен возвращать true или false?

x = [1, 2] 
y = [1, 2] 
y.myextramember = "foo" 

my_eqtest(x, y) // should be true or false? 

Вы должны описать (документ), что вы имеете в виду равенство, если он не возражает личность, в противном случае, кто читает код не поймет, почему-то не работает (в том числе и себя в течение нескольких недель).