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)
。它可能不是一根弦