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

Unk*_*own 3 javascript

所以这就是我的数据的样子:

categories = [
  {
    name: ""
    products: [
      {
        id: 1,
        ...
      },
      {
        id: 2,
        ...
      }
    ]
  },
  {
    name: ""
    products: [
      {
        id: 3,
        ...
      },
      {
        id: 4,
        ...
      }
    ]
  },
  ...
]
Run Code Online (Sandbox Code Playgroud)

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

categories.map(category => category.products.filter(product => product.id !== 1))
Run Code Online (Sandbox Code Playgroud)

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

T.J*_*der 6

您已经接近了,但是您的代码只是用它们的过滤products数组替换了类别对象,而失去了其余的对象属性。您需要复制每个category对象及其products数组,这通常通过扩展符号进行:

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