javascript - 是否有可能使传播运算符忽略未定义的属性

标签 javascript

<分区>

鉴于以下

[{ a: 5, b: 2 }, { a: 2, b: 5 }].map(x => {
  return {
    ...x,
    b: undefined
  }
})

我想以这样的方式结束

[{a:5},{a:2})

这可能吗? 我知道我可以做类似的事情

[{ a: 5, b: 2 }, { a: 2, b: 5 }].map(x => {
const obj = {
    ...x,
  }
  delete obj.b
  return obj
})

[{ a: 5, b: 2 }, { a: 2, b: 5 }].map(x => {
  return {
    a: x.a
  }
})

第一种方法导致值被设置为“未定义”。 第二种方法对于较大的数组来说似乎很浪费,因为创建了一个新变量对象,而且我的 typescript 也提示它,因为原始属性不是可选的。 如果您只想保留少量属性,第三种方法是可行的,但是一旦它只保留了几个属性,它就显得笨拙了。 对于我目前的情况,我可能会选择第二种方法,但我很好奇是否有一种方法可以更优雅地处理这个问题。

我知道我也可以这样做:

Object.keys(obj).forEach(key => obj[key] === undefined && delete obj[key])

但是看起来还是不够优雅。

最佳答案

您可以忽略 b 并收集 rest 中的所有属性,然后在最终结果中展开 rest

你也可以把它做成一个衬垫

const result = arr.map(({ b, ...rest }) => rest);

const arr = [
  { a: 5, b: 2 },
  { a: 2, b: 5 },
]
const result = arr.map(({ b, ...rest }) => rest);

console.log(result);

关于javascript - 是否有可能使传播运算符忽略未定义的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69055963/

相关文章:

PHP 相当于一个 javascript 时间戳(毫秒不是微秒)

javascript - 如何删除除以某个单词开头的文本之外的所有文本?

javascript - 如何使用 javascript 使按钮标签动态化?

javascript - 删除正文元素

javascript - Facebook Javascript SDK 安全问题?

javascript - onsen-ui滑动菜单打开两次

javascript - ASP.NET AJAX 回发中止

javascript - 当对象的键中有冒号时如何访问对象属性?

javascript - 使用 React 清除输入字段

javascript - 使用 Vaadin 将 Google map API key 实现到 Java 项目中