Javascript 同时过滤数组和字符串?
在这里,我正在筛选项目:Javascript 同时过滤数组和字符串?,javascript,reactjs,react-native,filtering,Javascript,Reactjs,React Native,Filtering,在这里,我正在筛选项目: let filter = this.props.data.filter( (item) => { return ( item.fname.toLowerCase().indexOf(this.state.search.toLowerCase()) !== -1 || item.lname.toLowerCase().indexOf(this.state.search.toLowerCase()) !== -1 );
let filter = this.props.data.filter(
(item) => {
return (
item.fname.toLowerCase().indexOf(this.state.search.toLowerCase()) !== -1 ||
item.lname.toLowerCase().indexOf(this.state.search.toLowerCase()) !== -1
);
}
);
因此,每当用户在输入字段中键入内容时,我都会更新我的表。但是,不仅有fname
和lname
,还有一个名为[children]
的数组字段,其中包含此人的子女姓名:
孩子:[“鲍勃”、“安德鲁”、“玛丽·简”]
我还想筛选是否输入了这些名称中的任何一个。我该怎么做?我是一名javascript/React初学者,因此我非常感谢您的帮助 您可以使用来检查数组中是否有任何元素将您的搜索项作为子字符串:
const search = this.state.search.toLowerCase();
let filter = this.props.data.filter(
(item) => {
return (
item.fname.toLowerCase().includes(search) ||
item.lname.toLowerCase().includes(search) ||
item.children.some(child =>
child.toLowerCase().includes(search)
)
);
}
);
您可以采用完全动态的方法,只需要一组想要的属性进行迭代。如果发现,则短路退出
const search = this.state.search.toLowerCase();
let filter = this.props.data.filter(item => ['fname', 'lname', 'children'].some(k =>
Array.isArray(item[k])
? item[k].some(v => v.toLowerCase().includes(search))
: item[k].toLowerCase().includes(search)
));
我认为array.includes(String)
可以完成这项工作。