获取对象与另一个对象的属性的子集
问题描述:
我知道this existing question然而我只对普通的javascript解决方案感兴趣(没有像lodash这样的外部库)。获取对象与另一个对象的属性的子集
什么是最彻底的方法(包括所有ES6善良与超越 - 状物体休息&传播等),以获得与道具与JavaScript中另一个对象的子集的对象?
假设我想从source
对象中挑选foo
,bar
和baz
。 我目前有两种解决方案,我想他们都没有:
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
或者调用一些自定义函数来实现这一点。
答
如果你有包含你需要很多属性的对象,及少量不这样做,你可以使用object rest syntax:
const source = { foo: 1, bar: 2, baz: 3, whatever: 4 };
const { whatever, ...target } = source;
console.log(target);
注意 - 对象休息是ECMAScript的第3阶段建议,并且需要一个转译器(babel,Object rest spread transform)。
答
你可以使用一个破坏的IIFE。
const source = { foo: 1, bar: 2, baz: 3 },
target = (({ foo, bar, baz }) => ({ foo, bar, baz }))(source);
console.log(target);
答
你可以用解构赋值
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);
什么是第一种方法的问题? – guest271314