这是更精简的内容,尽管它并不能避免重复字段列表。它使用“参数解构”来避免需要v
范围。
({id, title}) => ({id, title})
(请参阅此中的可运行示例其他答案 https://stackoverflow.com/a/51340842/1269037).
@EthanBrown 的解决方案更通用。这是一个更惯用的版本,它使用Object.assign
和计算属性([p]
part):
function pick(o, ...props) {
return Object.assign({}, ...props.map(prop => ({[prop]: o[prop]})));
}
如果我们想保留属性的属性,例如configurable
以及 getter 和 setter,同时还省略不可枚举的属性,然后:
function pick(o, ...props) {
var has = p => o.propertyIsEnumerable(p),
get = p => Object.getOwnPropertyDescriptor(o, p);
return Object.defineProperties({},
Object.assign({}, ...props
.filter(prop => has(prop))
.map(prop => ({prop: get(props)})))
);
}