Почему forEach меняет мое логическое значение? - PullRequest
0 голосов
/ 26 августа 2018

Я делаю базу данных фильмов с 3 фильмами. Я хочу сделать функцию, которая принимает аргумент (массив) и console.log («Вы смотрели этот фильм»), когда «haveSeen: true»

var movies = [
     {
      title: ...,
      haveSeen: true
     },
     {
      title: ...,
      haveSeen: true
     },
     {
      title: ...,
      haveSeen: false
     }
]




 function display(arr) {
  arr.forEach(function(element) {
    if(element.haveSeen = true) {
      console.log("You have watched this movie")
    }
  })
}

Когда я запускаю «display (movies)» в консоли. Консоль изменит все логические значения haveSeen на «true». Зачем? Я хочу, чтобы консоль только console.log два раза, потому что я установил только два фильма "haveSeen: true"

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Ваша проблема в том, что в вашей функции есть эта строка:

if(element.haveSeen = true) { 

Одиночный = - это оператор присваивания, используемый только при присваивании значений переменным.Измените это на ===, и оно будет работать:

if(element.haveSeen === true) { 

или, поскольку это логическое значение, полностью удалите сравнение:

if(element.haveSeen) { 
0 голосов
/ 26 августа 2018

Вам необходимо понять разницу между оператором присваивания = оператором эквивалентности == и оператором равенства ===.

пусть х = 1; if (x = 2) всегда будет правдивым, поскольку вы только что присвоили 2 x, а 2 - правдиво.

Оператор === - это то, что вы хотите использовать при тестировании, если что-то равно чему-то другому.

если (x === 1) верно, а (x === 2) неверно.

Оператор эквивалентности == - это еще одна вещь, которую, как вы можете видеть, используют люди, но многие стандарты кодирования препятствуют его использованию, поскольку результат может не всегда соответствовать ожидаемому. Так как в (2 == '2') верно, поскольку целое число 2 эквивалентно строке 2, но они не равны в (2 === '2') смысле.

Видя, что вы тестируете логическое значение, вам не нужен оператор, и вы можете просто использовать

if (element.haveSeen)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...