ES2015解构为一个对象

时间:2016-02-02 15:33:49

标签: javascript ecmascript-6

我正在尝试解构一个对象并将所取出的变量应用到它自己的对象中。

e.g。对象beforeTest包含a,b,c,d

我想把{a,b}取出并添加到afterTest对象。

像...一样的东西。

let afterTest = { a, b } = beforeTest

如果你有很多变数,下面的工作有效,但并不是很漂亮。

let { a, b } = beforeTest;
let afterTest = Object.assign({}, a, b); //EDIT: This doesn't actually do what I intended, see comment on my question

任何人都知道有更好的方式来写这个吗?

由于

1 个答案:

答案 0 :(得分:2)

解构和对象简写是这里最好的朋友。

要从对象中选择一些属性并使用该子集创建新对象,您只需执行以下操作:

let {a, b} = beforeTest;
let afterTest = {a, b};

为此提供单行语法没有多大意义,因为当前语法很容易扩展到多个源/接收器:

let {a1, b1} = beforeTest;
let {a2, b2} = midTest;
let aN = {a1, a2}, bN = {b1, b2};

如果您的源没有重复属性(即,源1和2中只有一个具有字段a),则可以使用map(pluck)和reduce:< / p>

let beforeTest = {a: 1, b: 2, c: 3};
let midTest = {d: 4, e: 5, f: 6};

let fields = ['a', 'c', 'd'];
let afterTest = Object.assign.apply({}, [beforeTest, midTest].map(obj => {
  return Object.keys(obj).filter(key => fields.includes(key)).reduce((p, key) => (p[key] = obj[key], p), {});
}));

console.log(afterTest);

我不认为最后一种方法值得麻烦,因为数据的来源非常不透明。