javascript - 以不可变的方式删除嵌套数组中的对象

标签 javascript

这就是我的数据的样子:

categories = [
  {
    name: ""
    products: [
      {
        id: 1,
        ...
      },
      {
        id: 2,
        ...
      }
    ]
  },
  {
    name: ""
    products: [
      {
        id: 3,
        ...
      },
      {
        id: 4,
        ...
      }
    ]
  },
  ...
]

我想删除 id 为 1 的产品,这是我的代码:

categories.map(category => category.products.filter(product => product.id !== 1))

这是正确的代码吗?如果是这样,我如何创建一个新数组并使用新值设置它?

最佳答案

您已经很接近了,但您的代码正在将类别对象替换为其过滤后的 products 数组,从而丢失了其余的对象属性。您需要复制每个 category 对象及其 products 数组,这通常通过扩展符号来完成:

updatedCategories = categories.map(category => ({
    ...category,
    products: category.products.filter(product => product.id !== 1)
}));

关于javascript - 以不可变的方式删除嵌套数组中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61102584/

相关文章:

javascript - 从对象数组中获取单个属性数组

javascript - Angular 2 : How to capture when browser restore/maximize

javascript - 如何对具有子属性的对象进行排序?

javascript - 如何使用 Angular Js 检查复选框值以及存储在数据库中的现有逗号分隔值

javascript - 在 css 中选定的开始日期和结束日期之间的悬停效果

javascript - 为什么我的 javascript 显示值未建立?

PHP/Javascript 将带有 ' and "的 html 从 PHP 插入到 JavaScript 函数中

javascript - 加载时如何将值传递给 (function ( ) { })();

javascript - Extjs 5 通过停靠按钮的单击事件引用网格而不使用 .up?

javascript - 迭代对象直到找到与标签匹配的值