繁体   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