如何从键值数组中删除元素?

时间:2019-01-02 14:57:28

标签: javascript reactjs react-redux

我想从数组中删除特定元素,我正在从输入中获取元素的键。 我希望仅通过知道键才能删除该元素。

这是数组:

state ={
    splitAmount : [{
        "SplitAmount0": this.props.data.amount1
    }, {
        "SplitAmount1": this.props.data.amount2
    }, {
        "SplitAmount2": this.props.data.amount3
    }]
}

删除功能:

  removeSplitAmount(e) {
    console.log("remove",e.target.name)
    let array = [...this.state.splitAmount];
    let  index = this.state.splitAmount.IndexOf(p => p == e.target.name )
    if (index !== -1) {
        array.splice(index, 1);
        this.setState({splitAmount: array});
    }
}

3 个答案:

答案 0 :(得分:2)

您可以将数组上的.filter方法与Object.keys结合使用以清理函数:

removeSplitAmount(e) {
    const newSplitAmount = this.state.splitAmount
      .filter(p => !Object.keys(p).includes(e.target.name));

    this.setState({ splitAmount: newSplitAmount });
}

答案 1 :(得分:1)

正如德米特里(Dmitry)所说,您不能对一组对象执行indexOf……我感到很难过,但我没有意识到这一点。 在这种情况下将很有用: var beasts = ['ant','bison','camel','duck','bison'];

beasts.indexOf('bison')

根据您的情况,最好使用上述答案中所述的.filter方法,因为您正在搜索具有特定属性的对象

答案 2 :(得分:1)

您可以使用hasOwnPropertyfilter个所需的对象。

removeSplitAmount(e) {
  const newSplitAmount = this.state.splitAmount
    .filter(x => !x.hasOwnProperty(e.target.name));

  this.setState({ splitAmount: newSplitAmount });
}