2017-08-09 122 views
0

看起来像一个简单的任务,但我发现很难实现。 我有一个包含子对象的对象,并在它们上面循环时,我想根据其中一个字段的值(该字段存在于每个内部对象中)删除一个内部对象。从Javascript中的父对象中删除子对象

循环是这样的:

for (let old_item of this.updated_items) { 
    if (old_item['content_id'] === item.content_id) { 
     this.updated_items.***DELETE***(old_item) 
    } 
} 

标志着我的位置在哪里丢失的逻辑。 我如何从this.updated_items删除old_item? ES6 if you possible ..thx

+0

ü可以请出示你的HTML ? –

+0

删除是什么意思?从数组中删除/替换为未定义/做一个DOM删除? –

+0

“this.updated_items”究竟是什么?一个数组,一个'Map'?没有这些信息就不可能回答这个问题。你所展示的是它是可迭代的。 – Bergi

回答

1

可以使用filter功能一个数组,并使用Array.from你的对象转换为数组:

this.update_items = Array.from(this.updated_items).fiter(old_item => old_item.content_id !== item.content_id) 
+0

它不是一个数组,它是一个包含子对象的对象(我发布了或多或少相同的答案,然后才意识到这一点) –

+0

噢好吧,也许然后使用['数组。从'](// mdn.io/array.from)将解决这个问题 –

+0

我不知道OP的情况,但它与节点元素的列表(例如调用'myOl.children') –

1

您可以迭代Object#entries,当在该值上找到正确的content_id时,从原始对象中删除该键。

for (const [key, value] of Object.entries(this.updated_items)) { 
    if (value.content_id === item.content_id) { 
     delete this.updated_items[key]; 
    } 
} 

由于对象#项不被一些浏览器的支持,另一种选择是使用阵列#foreach来对象的关键,如果content_id发现删除原始对象的关键是:

Object.keys(this.updated_items) // get the object's keys 
    .forEach((key) => // iterate the keys 
       this.updated_items[key].content_id === item.content_id // if the content id is similar 
       && 
       delete this.updated_items[key] //delete the key from the original object 
    ) 
+0

我不确定使用'删除'关键字是OP的意思 –

+0

据我了解,他想从一个对象中删除一个属性,删除是这样做的方式。如果他不这样认为,他会选择另一个答案:) –

+0

你也不需要使用Object.entries,只是'for ... of'应该做到这一点(如果浏览器支持它) –