Javascript 如何按嵌套数组进行筛选?

Javascript 如何按嵌套数组进行筛选?,javascript,Javascript,我得到了以下代码: this.setState({ data: data.filter(entry => entry.A.toLowerCase().indexOf(event.target.value.toLowerCase()) > -1 || entry.B.toLowerCase().indexOf(event.target.value.toLowerCase()) > -1 || entry.C.toLowerCase().i

我得到了以下代码:

this.setState({
   data: data.filter(entry =>
      entry.A.toLowerCase().indexOf(event.target.value.toLowerCase()) > -1
      || entry.B.toLowerCase().indexOf(event.target.value.toLowerCase()) > -1
      || entry.C.toLowerCase().indexOf(event.target.value.toLowerCase()) > -1
   )
})
它可以正常工作并正确过滤字符串,但我还有另外两个属性
D
E
,它们是字符串数组

      || entry.D.toLowerCase().indexOf(event.target.value.toLowerCase()) > -1
      || entry.E.toLowerCase().indexOf(event.target.value.toLowerCase()) > -1
当我添加最后两个属性时,我得到以下错误:

TypeError: entry.D.toLowerCase is not a function

在这种情况下,如何按嵌套数组进行筛选?

您需要将字符串数组转换为它们的小写等效值(可以使用
.map
),然后您可以检查它们包含的字符串
中的
部分是否包含
事件.target.value

  || entry.D.some(str => str.toLowerCase().includes(event.target.value.toLowerCase()))
  || entry.E.some(str => str.toLowerCase().includes(event.target.value.toLowerCase()))
或者,为了减少重复性:

const lowerValue = event.target.value.toLowerCase();
this.setState({
   data: data.filter(entry =>
      entry.A.toLowerCase().includes(lowerValue)
      || entry.B.toLowerCase().includes(lowerValue)
      || entry.C.toLowerCase().includes(lowerValue)
      || entry.D.some(str => str.toLowerCase().includes(lowerValue))
      || entry.E.some(str => str.toLowerCase().includes(lowerValue))
   )
})
const lowerValue = event.target.value.toLowerCase();
const entries = [entry.A, entry.B, entry.C, ...entry.D, ...entry.E]
  .map(str => str.toLowerCase());
this.setState({
   data: data.filter(entry => entries.some(str => str.includes(lowerValue)))
})
或者,更不用说重复了:

const lowerValue = event.target.value.toLowerCase();
this.setState({
   data: data.filter(entry =>
      entry.A.toLowerCase().includes(lowerValue)
      || entry.B.toLowerCase().includes(lowerValue)
      || entry.C.toLowerCase().includes(lowerValue)
      || entry.D.some(str => str.toLowerCase().includes(lowerValue))
      || entry.E.some(str => str.toLowerCase().includes(lowerValue))
   )
})
const lowerValue = event.target.value.toLowerCase();
const entries = [entry.A, entry.B, entry.C, ...entry.D, ...entry.E]
  .map(str => str.toLowerCase());
this.setState({
   data: data.filter(entry => entries.some(str => str.includes(lowerValue)))
})

您可以将值转换为字符串并收集数组中的所有属性

var string = event.target.value.toLowerCase(),
    keys = ['A', 'B', 'C', 'D', 'E'];

this.setState({
    data: data.filter(entry => keys.some(k => entry[k]
        .toString()
        .toLowerCase()
        .includes(string)
    ))
});
执行
console.log(entry.D)
。它可能不是一根弦