【问题标题】:How to remove object properties from nested arrays of objects?如何从嵌套的对象数组中删除对象属性?
【发布时间】:2021-01-30 21:34:18
【问题描述】:

我正在尝试从数组中的每个对象中删除这两个属性,而它不工作。每个对象都在一个数组中。我的意思是主数组包含对象数组。有没有不使用 map() 两次的简单方法来解决它?以及在这种情况下如何返回主修改数组?

const modifiedItems = this.items.map(item => {
   delete item.created,
   delete item.removed
   return item
})

数据如下所示:

this.items = [
  [{ removed: 1, created: 1, a:2, b: 2, c: 3}]
  [{ removed: 1, created: 1, a:2, b: 2, c: 3}, { removed: 1, created: 1, a:2, b: 2, c: 3},]
];

上面的代码不起作用,因为它没有映射到主数组中的数组。如何最好地从位于主数组中的所有数组的每个对象中删除这些属性?

【问题讨论】:

  • 您是否正在检查modifiedItems 中的结果列表?

标签: javascript arrays ecmascript-6 javascript-objects ecmascript-5


【解决方案1】:

与其删除,不如只返回一个没有您要删除的属性的对象。

您可以解构要删除的属性,然后使用rest parameters 语法在变量中收集其他属性。在此之后,您只需要返回包含您要删除的属性以外的所有属性的变量。

const modifiedItems = this.items.map(
   ({ created, removed, ...rest }) => rest
);

下面的代码 sn -p 显示一个例子:

const arr = [
  { removed: 1, created: 1, a:2, b: 2, c: 3},
  { removed: 1, created: 1, a:2, b: 2, c: 3},
  { removed: 1, created: 1, a:2, b: 2, c: 3},
];

const modifiedItems = arr.map(
   ({ created, removed, ...rest }) => rest
);

console.log(modifiedItems);

编辑:

在您的情况下,this.items 是一个包含嵌套数组的数组。因此,要从嵌套数组中的对象中删除属性,您还需要映射每个嵌套数组。

下面的代码 sn -p 显示一个例子:

const items = [
  [ { removed: 1, created: 1, a: 2, b: 2, c: 3 } ],
  [
    { removed: 1, created: 1, a: 2, b: 2, c: 3 },
    { removed: 1, created: 1, a: 2, b: 2, c: 3}
  ]
];

const modifiedItems = items.map(subArr => {
  return subArr.map(({ created, removed, ...rest }) => rest)
});

console.log(modifiedItems);

【讨论】:

  • 查看更新答案中的代码 sn-p。除非你做错了什么,否则这种方法肯定会奏效。
  • 对不起,这是我的错误,原因是每个对象都在一个数组中。我的意思是主数组包含对象数组。这就是为什么它不起作用。有没有不使用 map() 两次的简单方法来克服它?
  • @Lioness100 无需道歉,我总是愿意接受意见或建议 :) 几分钟后我将移除我的 cmets,因为它们对任何人都没有用。我希望你也这样做。
猜你喜欢
  • 2021-10-29
  • 1970-01-01
  • 2020-10-30
  • 2021-12-28
  • 2020-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多