使用另一个对象的属性子集获取对象

kam*_*lkp 6 javascript

我知道这个现有的问题,但我只对普通的javascript解决方案感兴趣(没有像lodash这样的外部库).

什么是最干净的方式(包括所有ES6的善良和超越 - 像对象休息和传播等)从javascript中获取具有来自另一个对象的道具子集的对象?

可以说,我要挑foo,barbazsource对象.我目前有两个解决方案,我不喜欢它们:

1.

const result = {
  foo: source.foo,
  bar: source.bar,
  baz: source.baz
};
Run Code Online (Sandbox Code Playgroud)

2.

const { foo, bar, baz } = source;
const target = { foo, bar, baz };
Run Code Online (Sandbox Code Playgroud)

第二个是较短但是它用一些变量污染了当前的执行范围,并且它们的列表无论如何都必须写入两次.

PS.我也不想Object.prototype用一些辅助方法扩充或调用一些自定义函数来实现这一点.

Ori*_*ori 1

如果您的对象包含许多您需要的属性,以及少量您不需要的属性,则可以使用对象剩余语法

const source = { foo: 1, bar: 2, baz: 3, whatever: 4 };

const { whatever, ...target } = source;

console.log(target);
Run Code Online (Sandbox Code Playgroud)

注意- 对象剩余是 ECMAScript 的第 3 阶段提案,需要一个转译器(带有对象剩余扩展变换的babel)。