Возвращение результата из forEach приводит к неопределенности - PullRequest
0 голосов
/ 21 января 2020

У меня есть функция, которая перебирает список, используя forEach, и я хочу вернуть результат раньше (имитируя break). Но функция возвращает неопределенное. Почему он возвращает неопределенное значение?

Вот скрипка.

const list = [1, 2, 3];
const test = () => {
  const rs = list.forEach(item => {
    return item
  })
   return rs
}
const rs = test()

console.log(rs)

Ответы [ 4 ]

0 голосов
/ 21 января 2020

Исправьте эту проблему следующим образом.

const list = [1, 2, 3];
const test = () => {
  const rs = [];
list.forEach(item => {
    rs.push(item);
  })
   return rs;
}
const rs = test();

console.log(rs);
0 голосов
/ 21 января 2020

Если вы хотите узнать, есть ли что-то в списке, вам нужно это - note test должен вернуть что-то, чтобы журнал что-либо показывал

const list = [1, 2, 3];
const test = () => {
  const rs = list.filter(item => {
    return item!=null
  })
  return rs.length>0;
}
const rs = test()

console.log(rs)
0 голосов
/ 21 января 2020

По определению, forEach возвращает неопределенное значение. смотрите это: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

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

const list = [1, 2, 3];
const test = () => {
  const rs = list.map(item => {
      return item
  })
  return rs;
}
const rs = test()
0 голосов
/ 21 января 2020

Функция forEach не возвращает значение. Вам было бы лучше использовать find. На данный момент неясно, что вы хотите сделать со своим l oop, поэтому я предполагаю, что вы пытаетесь вернуть значение, основанное на условии.

С MDN

forEach () выполняет функцию обратного вызова один раз для каждого элемента массива; в отличие от map () или redu (), он всегда возвращает значение undefined и не является цепным. Типичный вариант использования - выполнение побочных эффектов в конце цепочки.

Кроме того, неправильный способ вызова вашей функции. Вы устанавливаете переменную внутри обратного вызова, но никогда не возвращаете переменную. Функция test ничего не возвращает. Следовательно, вы получаете неопределенное значение.

Вы должны вернуть значение функции find.

const list = [1, 2, 3];
const test = () => {
  return list.find(item => {
      if(/* some condition */ item > 1) {
        return item
      }
  })
}
const rs = test()

console.log(rs)
...