@Mr_Epic
Web программист

Два одинаковые массива не равны?

Есть вот такая простоя функция, которая формирует массив [0,1,2]:
function get_arr(arr=[]){
	arr.push(arr.length);
	if(arr.length < 3) get_arr(arr);
	return arr;
}

Результат:
get_arr();
(3) [0, 1, 2]

Но если сравнить результат функции с её же результатом, они не равны:
get_arr() == get_arr()
false

Почему это происходит?
  • Вопрос задан
  • 2107 просмотров
Решения вопроса 2
@kttotto
все, что .NET
Потому, что Вы сравниваете не элементы массива, а ссылки на объекты. А так как это разные объекты, то и ссылки будут отличаться. Если хотите поэлементно сравнить массивы, то используйте другие способы.
Ответ написан
Комментировать
rework
@rework
Помог ответ? В благодарность отметь его решением
в JavaScript массивы являются объектами. Метод get_arr возвращает вам каждый раз новый объект. Когда вы сравниваете массивы через ==, то сравниваются ссылки на объекты, а они, как я сказал выше, разные. Есть простые способы сравнить массивы приводя их к строке:

get_arr().toString() == get_arr().toString()

Или:

JSON.stringify(get_arr()) == JSON.stringify(get_arr())


В тоже время если ваши массивы будут реально ссылаться на один и тот же объект, то при сравнении вы получите true:

var arr1 = get_arr();
var arr2 = arr1;
arr1 == arr2 // true


Так же можно найти различия в массивах, для этого удобно использовать библиотеку lodash, метод difference - https://lodash.com/docs/4.17.4#difference
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы