ecmascript-6 - 将对象的子集直接解构为新对象

标签 ecmascript-6

<分区>

是否有一个我正在空白的单行代码来执行此操作?

// 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 }), {});

关于ecmascript-6 - 将对象的子集直接解构为新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39299046/

相关文章:

javascript - ES6 中 const 对象键的命名约定

javascript - ECMAScript 类

javascript - 是否可以使用 ReactNative 组件作为其节点之一来创建 ES6 map ?

ecmascript-6 - 在 es6 中迭代对象

javascript - 在 ES6 中按名称实例化第 3 方类

javascript - 从 Object ES6 方式克隆特定键

javascript - 如何对数据进行分组?

javascript - 导入的常量未定义

Javascript类,访问属性回调

node.js - 为什么要转译 Node.js 后端代码?