Javascript 如何从键值数组中删除元素?
我想从数组中删除一个特定的元素,我要从输入中获取元素的键。 我希望只有知道密钥才能删除元素 这是阵列:Javascript 如何从键值数组中删除元素?,javascript,reactjs,react-redux,Javascript,Reactjs,React Redux,我想从数组中删除一个特定的元素,我要从输入中获取元素的键。 我希望只有知道密钥才能删除元素 这是阵列: state ={ splitAmount : [{ "SplitAmount0": this.props.data.amount1 }, { "SplitAmount1": this.props.data.amount2 }, { "SplitAmount2": this.props.data.amount3 }]
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});
}
}
正如Dmitry所说,您不能对对象数组执行indexOf。。。我感到很难过,我没有意识到这一点。 在这种情况下会很有用: 动物变量=[“蚂蚁”、“野牛”、“骆驼”、“鸭子”、“野牛”] 野兽指数(‘野牛’)
在您的情况下,最好使用上述答案中所述的.filter方法,因为您正在搜索具有特定属性的对象,正如Dmitry所说,您无法对对象数组进行索引。。。我感到很难过,我没有意识到这一点。 在这种情况下会很有用: 动物变量=[“蚂蚁”、“野牛”、“骆驼”、“鸭子”、“野牛”] 野兽指数(‘野牛’)
在您的情况下,您最好使用上述答案中所述的.filter方法,因为您正在搜索具有特定属性的对象您可以在数组上使用
.filter
方法并结合对象。键
大量清理函数:
removeSplitAmount(e) {
const newSplitAmount = this.state.splitAmount
.filter(p => !Object.keys(p).includes(e.target.name));
this.setState({ splitAmount: newSplitAmount });
}
您可以在与
对象组合的数组上使用.filter
方法。键
可以大量清理函数:
removeSplitAmount(e) {
const newSplitAmount = this.state.splitAmount
.filter(p => !Object.keys(p).includes(e.target.name));
this.setState({ splitAmount: newSplitAmount });
}
您可以使用
hasOwnProperty
过滤所需的对象
removeSplitAmount(e) {
const newSplitAmount = this.state.splitAmount
.filter(x => !x.hasOwnProperty(e.target.name));
this.setState({ splitAmount: newSplitAmount });
}
您可以使用
hasOwnProperty
过滤所需的对象
removeSplitAmount(e) {
const newSplitAmount = this.state.splitAmount
.filter(x => !x.hasOwnProperty(e.target.name));
this.setState({ splitAmount: newSplitAmount });
}
indexOf
的可能重复项的可能重复项不将lmbda作为参数。除非您想在lambda数组中查找lambda的索引。indexOf
不将lmbda作为参数。除非您想在lambda数组中查找lambda的索引。如果您需要支持像IE11这样的旧浏览器,请确保在“包含”函数中包含polyfill。如果您需要支持像IE11这样的旧浏览器,请确保在“包含”函数中包含polyfill。我认为这是最好的答案,即使“newSplitAmount”变量甚至不是必需的,如果您想要更少的代码,可以删除它。我认为这是最好的答案,尽管“newSplitAmount”变量甚至不是必需的,如果您想要更少的代码,可以删除它