[英]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.