是否有一个我正在空白的单行代码来执行此操作?
// this.state is a basic object with many keys
var {toDate, fromDate, location, flavor} = this.state
var goodKeys = {toDate, fromDate, location, flavor}
// goodKeys is an object that contains a subset of this.state's keys
我能想到的唯一方法是:
var {keyIDontWant, otherUnwanted, ...goodKeys} = this.state
但这似乎会让阅读代码的人感到困惑,并且需要更多的努力来弄清楚如何编写。
_.pick
仍然是在 ES6 中有其用例的 Underscore/Lodash 特性之一。
ES6 单行代码可能是一个 IIFE,将导致两次枚举属性列表:
let goodKeys = (
({toDate, fromDate, location, flavor}) => ({toDate, fromDate, location, flavor})
)(this.state);
ES.next 与 _.pick
的单行对应可能涉及 Object.entries
:
Object.entries(o)
.filter(([key]) => ['toDate', 'fromDate', 'location', 'flavor'].includes(key))
.reduce((obj, [key, val]) => Object.assign(obj, { [key]: val }), {});