Javascript将属性数组复制到另一个对象(单行)

时间:2017-03-31 17:29:55

标签: javascript ecmascript-6

这显然是使用传统循环的直截了当,但我很好奇是否有人能够想到一个很好的,紧凑的方式来进行解构和扩展运算符。

例如,假设我有

const foo = { a: 1, b: 2, c: 3, d: 4 };
const list = ['a', 'd'];

我想创建bar = { a: 1, d: 4 }

您可以执行类似

的操作
const bar = {};
list.forEach((p) => { bar.p = list.p; });

但我想知道是否有人使用ES2015 +进行光滑的单线程。例如,您可以执行const { b, c, ...bar } = foo,但如果您在运行时之前已经知道了逆变量。

虽然理想情况下该解决方案将支持数组中的动态属性列表,但具有静态已知列表的列表总比没有好。 (例如,const bar = ({{ a, d }} = foo)

1 个答案:

答案 0 :(得分:-1)

我认为你能做的最好的事情是Array#reduce



const foo = { a: 1, b: 2, c: 3, d: 4 };
const list = ['a', 'd'];

const bar = list.reduce((o, k) => (o[k] = foo[k], o), {})

console.log(bar)