簡體   English   中英

香草JS。 從每個方法中的數組中刪除對象?

[英]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因為Taco0th個索引處找到,所以它刪除了所有元素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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM