使用另一个对象

时间:2016-12-24 21:38:07

标签: javascript

我知道this existing question但是我只对普通的javascript解决方案感兴趣(没有像lodash这样的外部库)。

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

假设我想从foo对象中选择barbazsource。 我目前有两个解决方案,我不喜欢它们:

1

const result = {
  foo: source.foo,
  bar: source.bar,
  baz: source.baz
};

2

const { foo, bar, baz } = source;
const target = { foo, bar, baz };

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

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

3 个答案:

答案 0 :(得分:2)

你可以使用具有破坏性的IIFE。

const source = { foo: 1, bar: 2, baz: 3 },
      target = (({ foo, bar, baz }) => ({ foo, bar, baz }))(source);

console.log(target);

答案 1 :(得分:1)

如果你有一个包含你需要的许多属性的对象,而有一些你不需要的属性,你可以使用object rest syntax

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

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

console.log(target);

注意 - 对象休息是ECMAScript的第3阶段提案,需要转发器(带有Object rest spread transform的babel)。

答案 2 :(得分:0)

您可以使用解构分配



const source = {foo: 1, bar:2, baz:3, abc: 4, def: 5};

const result = {};

({foo:result.foo, bar:result.bar, baz:result.baz} = source);

console.log(result);




或者,您可以将属性名称设置为数组的元素,使用带有解构赋值的for..of循环来设置属性,值target



const source = {foo: 1, bar:2, baz:3, abc:4, def: 5};

const result = {};

for (let prop of ["foo", "bar", "baz"]) ({[prop]:result[prop]} = source);

console.log(result);