[英]How to delete object element from an array using JavaScript in React
我想刪除其 id 與 deleteItem(index) 中的索引匹配的 items(Array) 元素。
以下是我迄今為止嘗試過的代碼:
constructor(){
super()
this.state = {
items : [
{ id: 34523, type: 'a', data: 'aaa' },
{ id: 23452, type: 'b', data: 'bbb' }.
{ id: 45644, type: 'c', data: 'ccc' }
]
}
}
deleteItem(index){
const copyStateAr = Object.assign([], this.state.items)
copyStateAr.splice(index, 1);
this.setState({
items: copyStateAr
})
}
注意:當我將 id 設為 1、2、3 時,上面的代碼工作正常。但如果我先刪除第二個元素,那么第三個元素不會被刪除。
此外,如果可能的話,建議我使用其他方法或方法來完成相同的任務(它是一種搜索(id)和刪除元素)。
你最好的選擇是:
setState
的回調形式,以便處理最新信息那是因為 state 更新可能是異步的並且可能是批處理的,因此依靠索引可以為奇怪的邊緣情況失敗做好准備。
所以:
deleteItem(id) {
this.setState(({items}) => ({items: items.filter(e => e.id !== id)}));
}
只需按 ID 刪除對象
deleteItem(id){
this.setState({
items: this.state.items.filter(x => x.id !== id)
})
}
指數不斷變化。 所以如果你有
{ id: 34523, type: 'a', data: 'aaa' },
{ id: 23452, type: 'b', data: 'bbb' }.
{ id: 45644, type: 'c', data: 'ccc' }
刪除 2 索引
然后結構變成
{ id: 34523, type: 'a', data: 'aaa' },
{ id: 45644, type: 'c', data: 'ccc' }
所以你最好開始按 id 元素刪除。 如果索引 <= 元素數並且未找到發送消息索引,則添加一個條件。 您可以制作原始副本並從副本中刪除。 所以原始數據總是有完整的。
您可以使用.forEach 高階function 刪除具有指定id 的object,然后使用setState 更改state;
const newArray = [];
this.state.items.forEach(object => {
if ( object.id != specifiedId ) newArray.push(object);
});
this.setState({items: newArray});
希望能幫助到你 !
只需修改copystatear
const copyStateAr = Object.assign([], items).filter((value, i) => value.id !== id);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.