Задать вопрос
Carduelis
@Carduelis
Web-developer, front-end, js, less

Почему массивы не равны в js?

Вот допустим, у нас есть функция, на ввод которой ожидаем увидеть текст
function parseRoomName(text) {
  var auditoryName = text.split('');
}

мы берем и превращаем текст в массив и возвращаем его
function parseRoomName(text) {
  var auditoryName = text.split('');
  return auditoryName
}


Что будет, если мы введем parseRoomName('K-200')?
["K", "-", "2", "0", "0"]

Все как должно быть, верно?

А теперь попробуем сделать так, чтобы эта функция убирала дефисы, которые могли бы попасть в текстовый инпут.
function parseRoomName(text) {
  var auditoryName = text.split('');
  for (var i = auditoryName.length - 1; i >= 0; i--) {
    if (auditoryName[i] == '-') {
      auditoryName.splice(i,1);
    }
  }
  return auditoryName
}


Теперь вводим parseRoomName('K-200'), и получаем ["K", "2", "0", "0"]
Вводем parseRoomName('K200'), и тоже получаем ["K", "2", "0", "0"]

Но они не равны!

Если мы введем parseRoomName('K-200') == parseRoomName('K200'), мы получим false
Если мы введем
parseRoomName('K-200').length == parseRoomName('K200').length
, то мы получим true
Если мы введем
parseRoomName('K-200')[1]== parseRoomName('K200')[1]
, то тоже получим true

Что не так с этой жизнью?
  • Вопрос задан
  • 1587 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 3
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Array сравниваются по ссылке а не по значению.
[] != []
Ответ написан
Комментировать
@teslor
Массивы - это объекты, а объекты всегда сравниваются по ссылке, а не по содержанию. В вашем случае возвращаемые массивы это разные объекты, поэтому они не равны друг другу.
Ответ написан
Комментировать
L0k1
@L0k1
Массивы - ссылочный тип( как и объекты)
Чтобы они были равны, они должны ссылаться на одну ячейку памяти
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Если хотите сравнить массивы то напишите функцию которая сначала сравнивает длину массива, а потом обходит массивы и сравнивает элементы вручную.
Ответ написан
Комментировать
@dixoNich
frontend developer
Ссылка наподумать:
stackoverflow.com/questions/7837456/how-to-compare...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы