【发布时间】:2021-11-02 10:43:39
【问题描述】:
鉴于以下
[{ 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
}
})
第一种方法导致值被设置为“未定义”。 第二种方法对于较大的数组似乎很浪费,因为创建了一个新变量对象,而且我的打字稿也抱怨它,因为原始属性不是可选的。 如果您只想保留少量属性,则第三种方法有效,但是一旦它只保留了一些属性,它就会显得笨拙。 对于我目前的情况,我可能会选择第二种方法,但我很好奇是否有一种方法可以更优雅地处理它。
我知道我也可以这样做:
Object.keys(obj).forEach(key => obj[key] === undefined && delete obj[key])
但它似乎仍然没有那么优雅。
【问题讨论】:
-
rest 参数语法在这种情况下会有所帮助:解构要删除的属性并使用 rest 参数语法收集其余属性。比如:
arr.map(({ b, ...restProps }) => { ... })
标签: javascript