JavaScript. forEach возвращает неопределенное - PullRequest
0 голосов
/ 13 сентября 2018

Итак, у меня есть простая часть кода, где мне нужно обработать массив объектов и узнать, есть ли availability.prop1 опора какого-либо объекта внутри массива, равного true, и вернуть для него true, или если оно равно false, вернуть false. Это очень простой случай, я знаю, но по некоторым причинам я не могу понять, где мое падение ...

И что я ожидаю на выходе, это isSomeProp1EqualToTrue = true, потому что 2-й объект внутри массива data имеет положительное значение prop1 (true)

const data = [
 {prop1: false, {prop2: 'someValue'},
 {prop1: true, {prop2: 'someValue'},
 {prop1: false, {prop2: 'someValue'}
]

const isSomeProp1EqualToTrue = data.forEach(availability => {
  if (availability.prop1 === true) {
    return true
  }

  return false
})

// expected: isSomeProp1EqualToTrue = true (that's what I nedd)
// current: isSomeProp1EqualToTrue = undefined (wrong)

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Вы можете использовать уменьшить:

const data = [
 {prop1: false, prop2: 'someValue'},
 {prop1: true, prop2: 'someValue'},
 {prop1: false, prop2: 'someValue'}
];
var isSomeProp1EqualToTrue = data.reduce((total,currentValue)=>{
    return total || currentValue.prop1;
},0);
if(isSomeProp1EqualToTrue)
    console.log("Has some prop1 == true");
0 голосов
/ 13 сентября 2018

Вам нужно .some, чтобы проверить, проходят ли какие-либо элементы в массиве тест. forEach возвращает undefined:

const data = [
 {prop1: false, prop2: 'someValue'},
 {prop1: true, prop2: 'someValue'},
 {prop1: false, prop2: 'someValue'}
]

const isSomeProp1EqualToTrue = data.some(({ prop1 }) => prop1 === true);
console.log(isSomeProp1EqualToTrue);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...