【问题标题】:Filtering through arrays and strings at the same time?同时过滤数组和字符串?
【发布时间】:2018-12-18 10:39:56
【问题描述】:

我在这里过滤项目:

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
    );
  }
);

因此,每当用户在输入字段中输入内容时,我都会更新我的表格。但是,不仅有fnamelname,还有一个名为[children] 的数组字段,其中包含此人拥有的孩子的姓名:

children : ["Bob", "Andrew", "Mary-Jane"]

如果输入了任何这些名称,我还想过滤。我该怎么做?我是 javascript / React 初学者,所以我将不胜感激!

【问题讨论】:

标签: javascript reactjs react-native filtering


【解决方案1】:

您可以使用some 来检查数组中是否有任何元素将您的搜索词作为子字符串:

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)
      )
    );
  }
);

【讨论】:

    【解决方案2】:

    您可以采用完全动态的方法,只使用一组需要的属性进行迭代。如果发现短路退出。

    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)
        ));
    

    【讨论】:

      猜你喜欢
      • 2017-07-15
      • 2022-07-04
      • 1970-01-01
      • 2021-12-19
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      相关资源
      最近更新 更多