我想从数组中删除特定元素,我正在从输入中获取元素的键。 我希望仅通过知道键才能删除该元素。
这是数组:
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});
}
}
答案 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)
您可以使用hasOwnProperty
来filter
个所需的对象。
removeSplitAmount(e) {
const newSplitAmount = this.state.splitAmount
.filter(x => !x.hasOwnProperty(e.target.name));
this.setState({ splitAmount: newSplitAmount });
}