Страницы

Поиск по вопросам

пятница, 14 февраля 2020 г.

При сравнении 2 одинаковых массивов получается false [дубликат]

#javascript


        
             
                
                    
                        
                            На этот вопрос уже даны ответы здесь:
                            
                        
                    
                
                        
                            Преобразование скалярных типов при сравнении JavaScript
                                
                                    (2 ответа)
                                
                        
                                Закрыт 2 года назад.
            
                    
Почему 2 одинаковых массива не равны?

let a = [1, 2, 3],
    b = [1, 2, 3];

console.log(a == b); //false

    


Ответы

Ответ 1



Почему 2 одинаковых массива не равны? https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Операторы_сравнения Сравнение объекта истинно лишь в том случае, если оба операнда ссылаются на один и тот же объект в памяти как сравнить ? Обновлено, спасибо ( Suvitruf ) за замечание для сравнения массивов (НЕ)достаточно привести к строке console.log(a.toString() == '' + b); // true [ 1, 2 ].toString() == [ '1,2' ].toString() // true для сравнения объектов можно воспользоваться этим способом console.log(JSON.stringify({ a: 'A' }) == JSON.stringify({ a: 'A' })); // true console.log(JSON.stringify([ 1, 2 ]) == JSON.stringify([ '1, 2' ])); // false let a = [1, 2, 3] let b = [1, 2, 3] console.log(a.toString() == '' + b); // true console.log([1, 2].toString() == ['1,2'].toString()) // true console.log(JSON.stringify({ a: 'A' }) == JSON.stringify({ a: 'A' })); // true console.log(JSON.stringify([1, 2]) == JSON.stringify(['1, 2'])); // false

Ответ 2



Вы сравниваете ссылки. Для сравнения значений, нужно сравнивать элементы. В ES6 можно так: a.every( e => b.includes(e) ); С помощью underscorejs можно так: _.isEqual(a, b);

Комментариев нет:

Отправить комментарий