问题:
目标是创建一个简洁的ES6 中从对象中提取特定属性的函数。提出了涉及解构和简化对象文字的解决方案,但出现了关于字段列表重复的问题。
答案:
要实现更精简的解决方案,请考虑使用参数解构以消除对显式参数的需要:
({id, title}) => ({id, title})
虽然参数解构很方便,但它仍然需要重复财产清单。对于更通用的解决方案,请采用以下方法:
function pick(o, ...props) { return Object.assign({}, ...props.map(prop => ({[prop]: o[prop]}))); }
此解决方案利用 Object.assign 来合并对象,同时保留指定的属性 (props)。
属性属性的其他注意事项:
如果保留原始属性的属性(例如可配置性和getters/setters),并排除不可枚举的属性,请考虑以下事项:
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)}))) ); }
以上是ES6中如何高效地提取对象的特定属性?的详细内容。更多信息请关注PHP中文网其他相关文章!