如何编写一个在 ES6 中以最紧凑的方式只采用少数属性的函数?
我想出了使用解构 + 简化对象文字的解决方案,但我不喜欢代码中重复的字段列表。
有没有更苗条的解决方案?
(v) => {
let { id, title } = v;
return { id, title };
}
原文由 kirilloid 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何编写一个在 ES6 中以最紧凑的方式只采用少数属性的函数?
我想出了使用解构 + 简化对象文字的解决方案,但我不喜欢代码中重复的字段列表。
有没有更苗条的解决方案?
(v) => {
let { id, title } = v;
return { id, title };
}
原文由 kirilloid 发布,翻译遵循 CC BY-SA 4.0 许可协议
我不认为有任何方法可以使它比您的答案(或 torazburo 的)更紧凑,但本质上您要做的是模仿 Underscore 的 pick
operation 。在 ES6 中重新实现它会很容易:
function pick(o, ...fields) {
return fields.reduce((a, x) => {
if(o.hasOwnProperty(x)) a[x] = o[x];
return a;
}, {});
}
然后你有一个方便的可重用功能:
var stuff = { name: 'Thing', color: 'blue', age: 17 };
var picked = pick(stuff, 'name', 'age');
原文由 Ethan Brown 发布,翻译遵循 CC BY-SA 3.0 许可协议
13 回答12.7k 阅读
7 回答1.8k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答2.4k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
6 回答775 阅读✓ 已解决
2 回答1.9k 阅读
这里有一些更苗条的东西,尽管它不会避免重复字段列表。它使用“参数解构”来避免需要
v
参数。(请参阅 其他答案 中的可运行示例)。
@EthanBrown 的解决方案更通用。这是它的一个更惯用的版本,它使用
Object.assign
和计算属性([p]
部分):如果我们想保留属性的属性,例如
configurable
和 getters 和 setters,同时也省略不可枚举的属性,那么: