【问题标题】:How to remove single object from array如何从数组中删除单个对象
【发布时间】:2019-04-18 18:55:58
【问题描述】:

我正在尝试从嵌套数组中删除一个对象。我的情况是数组中有多次相同的对象,我应该是这样。那么如何从数组中删除一个对象,即使它们是其中的相同对象。 我过去的尝试是filterslice 方法。但它们实际上是一次删除所有相同的对象。

const data = {
    { id:1, name:'test'},
    { id:1, name:'test'},
    { id:1, name:'test'},
    { id:2, name:'test2'},
    { id:2, name:'test2'},
}

一次执行后的预期结果:

    { id:1, name:'test'},
    { id:1, name:'test'},
    { id:2, name:'test2'},
    { id:2, name:'test2'},

【问题讨论】:

  • 你的条件是什么?需要保留 2 个重复对象的条目吗?
  • 你知道对象的数组位置吗?
  • 删除哪一个重复项?第一,最后,第二?我们需要一个条件
  • @MihaiT 很确定如果它们是重复的,我们删除“哪个”并不重要,只要我们完成后正确的数字仍然存在
  • 这是一个集合?如果它应该在方括号 [] 内并且你应该使用 Array.prototype.splice.call(data, indexToRemove, 1); 或者如果它是一个对象你应该使用 delete data[keyToRemove];

标签: javascript arrays node.js object slice


【解决方案1】:

这些实际上是我的 redux 商店的一部分,我需要将相同的商品多次放入购物车然后结帐。所以我想保留重复的对象并在单击时只删除一个对象

从这个响应中,我猜你需要在(React?任何框架)中显示对象时存储它的索引,然后当你调度一个动作到 remove_item 时,将索引作为有效负载传递。如果没有一个最小的完整示例,很难确定,但是有了这些给定,您需要:

const data = {
  items: [
    { id:1, name:'test'},
    { id:1, name:'test'},
    { id:1, name:'test'},
    { id:2, name:'test2'},
    { id:2, name:'test2'},
  ],
};

const removeItem = (items, index) => ([ ...items.slice(0, index), ...items.slice(index + 1)]);

console.log(data);
data.items = [ ...removeItem(data.items, 2) ] ;
console.log(data);

【讨论】:

  • 您为什么要通过结合对Array.slice 的两个调用和一个扩展运算符来复制Array.splice?好像你把事情复杂化了。
  • @IceMetalPunk,问得好。 array splice 是一个 mutator 函数,它返回删除的元素而不是剩余的元素。在 Redux 的情况下,您总是倾向于返回一个新对象(不可变)。所以是的,稍微复杂一点,但既不过分,也不过分。
  • @D Lowther 如果你用一个新数组覆盖原始数组,无论如何它都会被垃圾回收。但是,如果您真的想返回一个新数组,最好只复制该数组并将其拼接,而不是将其切片两次并展开三次:)
猜你喜欢
  • 1970-01-01
  • 2018-08-07
  • 1970-01-01
  • 2023-01-16
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多