使用indexOf进行javascript搜索并不适用于map()

时间:2018-03-03 07:15:27

标签: javascript reactjs ecmascript-6

尝试使用react隐藏和显示列表但失败

handleChange = e => {
    const { list } = this.state;

    if (e.target.value !== "") {
      this.setState({
        list: list.map(o => ({
          name: o.name,
          hide: !o.name.indexOf(e.target.value) > -1
        }))
      })
    } else {
      this.setState({
        list: list.map(o => ({
          name: o.name,
          hide: false
        }))
      });
    }
  };

有任何疑问是什么错? https://codesandbox.io/s/8ljkoz41k2

1 个答案:

答案 0 :(得分:2)

让我解释一下你做错了什么

hide: !o.name.indexOf(e.target.value) > -1

在上面的代码中,将返回indexOf值(可能是某个数字),然后由于!运算符返回 false

您正在尝试将 BOOL 值与整数 -1 进行比较,这显然会返回 false

用括号包裹你的病情,并按如下方式!

hide: !(o.name.indexOf(e.target.value) > -1)

或使用以下条件,

hide: o.name.indexOf(e.target.value) === -1

它会起作用。