我有数组selectedItems
,当我尝试更新现有对象时:
i.e. [{lable: "one", uniqueId: 1}, {lable: "two", uniqueId: 1}]
到:
i.e. [{lable: "one", uniqueId: 1}, {lable: "two", uniqueId: 3}]
它将整个数组替换为:
[ { lable: "two", uniqueId: 3 }]
我怎样才能避免这种情况?
handleChange = (label, uniqueId) => {
const { selectedItems } = this.state
const findExistingItem = selectedItems.find((item) => {
return item.uniqueId === uniqueId;
})
if(findExistingItem) {
selectedItems.splice(findExistingItem);
this.setState(state => ({
selectedItems: [...state.selectedItems, {
label, uniqueId
}]
}))
} else {
this.setState(state => ({
selectedItems: [...state.selectedItems, {
label, uniqueId
}]
}))
}
}
最佳答案
另一种方法是串联使用 Array#filter
和 Array#concat
函数,其中;
- 与
uniqueId
不匹配的项目将被过滤掉。这将替换您当前解决方案的find()
逻辑,然后是, - 调用
concat()
方法将新的“替换项”附加到过滤后的数组的末尾
在可以这样实现的代码中:
handleChange = (label, uniqueId) => {
const {
selectedItems
} = this.state
this.setState({
selectedItems : selectedItems
/* Filter any existing item matching on uniqueId */
.filter(item => (item.uniqueId !== uniqueId))
/* Append replacement { label, uniqueId } to state array */
.concat([ { label, uniqueId } ])
});
}
关于javascript - ReactJS:用新值替换数组中的对象替换整个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57950591/