JavaScript: используйте forEach, чтобы увидеть, содержит ли массив конкретное числовое значение - PullRequest
0 голосов
/ 28 мая 2019

У меня есть код ниже. Я целенаправленно пытаюсь использовать forEach в этом случае.

function check(arr, el) {

  arr.forEach((element) => {

    console.log(element)

    if (element === el) {

       return true
    }
  })
}

check([1, 2, 3, 4, 5], 3)

Я ожидаю, что код вернет true, потому что значение el в массиве. Но вместо этого он возвращает неопределенное. Что я делаю неправильно?

Ответы [ 4 ]

4 голосов
/ 28 мая 2019

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

function check(arr, el) {
  return arr.some( element => element === el)
}

console.log(check([1, 2, 3, 4, 5], 3))

Если вы хотите использовать forEach, чем использовать переменную для хранения значения, а затем вернуться из функции

function check(arr, el) {
  let found = false
  
  arr.forEach((element) => {
    if (element === el && !found){
      found = true
    }
  })
  return found
}



console.log(check([1, 2, 3, 4, 5], 3))
1 голос
/ 28 мая 2019

Невозможно использовать return внутри оператора forEach.

ПРИМЕЧАНИЕ. Этот ответ только , поскольку вам нужно использовать forEach.Обычно вы всегда будете использовать some().

function check(arr, el) {
  let found = false;
  arr.forEach((element) => {
    console.log(element)
    if (element === el) {
      found = true;
    }
  });
  return found;
}



console.log( check([1, 2, 3, 4, 5], 3));
0 голосов
/ 28 мая 2019

Если вы хотите использовать forEach, вам нужно обновить переменную, когда вы найдете совпадение. Array.forEach по умолчанию возвращает undefined.Не существует build in способа выхода из forEach .

Поскольку вы просто ищете простое совпадение элементов, просто используйте Array.includes:

let check = (arr, el) => arr.includes(el)

console.log(check([1, 2, 3, 4, 5], 3))

Array.some предоставляет вам функцию итератора, которая в данном случае вам действительно не нужна.

С Array.forEach:

function check(arr, el) {
  let result = false
  arr.forEach((element) => {
    if (element === el) {
      result = true  // <-- update the result on match
    }
  })
  return result  // <-- return the result
}

console.log(check([1, 2, 3, 4, 5], 3))
0 голосов
/ 28 мая 2019

Просто для использования контекста OP. так как нужно использовать forEach.

function check(arr, el) {

  let found = false;

  arr.forEach((element) => {
    console.log(element)
    if (element === el){
        found = true;
    }
  })

  return found;
}
...