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

#javascript #reactjs

#javascript #reactjs

Вопрос:

Проблема в filter () по массиву объектов, мне нужно проверить, имеет ли currently index(object) массив свойство со значением isTransffered: false .

Вот как я использую функцию filter:

 let filteredResults = allResults

// isTransferred --> coming from state and have value "false"
if (isTransferred amp;amp; isTransferred !== 'all') {
  filteredResults = filteredResults.filter(
    res => res.isTransfer === isTransferred
  )
}
  

filteredResults это массив объектов — вот первый индекс массива:

 0:
 accountNumber: "8787986"
 isTransfer: true
 jurisdiction: "AK"
 lineOfBusiness: "wc"
  

Мне нужно проверить, является ли isTransfer ложным.

Заранее спасибо.

Комментарии:

1. res => res.isTransfer === !isTransferred ?

2. Возможно, это условие в состоянии IF является проблемой: (isTransferred amp;amp; isTransferred !== ‘all’) isTransferred равно false

3. Можете ли вы, пожалуйста, рассказать, что такое typeof(isTransferred) ? если это так, boolean тогда вы должны записать условие как if (isTransferred.toString() amp;amp; isTransferred.toString() !== 'all') { .

4. isTransferred может быть: true / false или ‘all’ Мне нужно выполнить фильтрацию по массиву на основе isTransferred array, если возможно, вернуть все объекты из массива, которые имеют istransferred значение false.

Ответ №1:

Проблема заключается в вашем условии, если

 if (isTransferred amp;amp; isTransferred !== 'all') {
  // this will not be executed if isTransferred is false
  filteredResults = filteredResults.filter(
    res => res.isTransfer === isTransferred
  )
}
  

Просто напишите это как

 if (isTransferred !== 'all') {
  filteredResults = filteredResults.filter(
    res => res.isTransfer === isTransferred
  )
}
  

Ответ №2:

Если внутри filteredResults вам нужно иметь все объекты, обладающие этим свойством isTransfer === false , то у вас проблема с filter() обратным вызовом.

Если вы введете IF оператор, то isTransferred равно true . Хотя в filter() обратном вызове вы пишете: res => res.isTransfer === isTransferred , что на обычном языке означает «возьмите записи, свойство которых isTransfer равно isTransferred «.
Хотя, поскольку мы находимся в IF , isTransferred равно true ! Итак, вы просто берете записи, которые имеют isTrasnfer свойство, равное true .

Решение: вам следует написать res => res.isTransfer !== isTransferred , наш более простой res => res.isTransfer === false