[英]Vanilla JS. Removing objects from an array within a for each method?
希望您能夠幫助我。 我正在嘗試根據其內容在數組中找到 object,然后一旦我發現 object,將其從數組中完全刪除(這樣我就可以使用新修改的數組更新本地存儲)。
let object = JSON.parse(localStorage.items);
// returns the following:
// [{text: 'Taco'}, {text: 'Pizza'}, {text: 'Curry'}]
object.forEach((obj, i) => {
obj.text === 'Taco' ? object.splice(i) : console.log(`${i}: ${obj.text} is not a Taco.`);
});
在這一點上,我希望 object 數組現在只包含 Pizza 和 Curry 但由於某種原因它仍然包含 Taco,我非常困惑,forEach 方法會輸出兩個控制台日志。 一份用於披薩,一份用於咖喱,但 Taco 並沒有實際發生任何事情。
有誰可以幫助我理解為什么這不起作用?
您可能會發現filter
更易於使用:
const notTacos = arr.filter(obj => obj.text !== 'Taco');
你的問題是object.splice(i)
當第二個參數(結束索引)被省略時,它被認為是object.length-1
因為Taco
在0th
個索引處找到,所以它刪除了所有元素Array.splice
let a = [{text: 'Taco'}, {text: 'Pizza'}, {text: 'Curry'}] let b = [{text: 'Taco'}, {text: 'Pizza'}, {text: 'Curry'}] a.splice(0) b.splice(0,1) console.log(a) console.log(b)
但是作為一個好習慣,當你迭代它時,你永遠不應該改變(刪除完整的元素)數組,最好使用filter
let object = [{text: 'Taco'}, {text: 'Pizza'}, {text: 'Curry'}] let final = object.filter(({ text }) => text.== 'Taco') console.log(final)
不要更改您正在迭代的集合。 它仍在迭代中,您正在更改集合本身。
使用 Natvie js 的 Filter 方法
常量過濾值 = object.filter(obj => obj.text!== 'Taco')
謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.