Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 同时过滤数组和字符串?_Javascript_Reactjs_React Native_Filtering - Fatal编程技术网

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)
可以完成这项工作。