我正在尝试解构一个对象并将所取出的变量应用到它自己的对象中。
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
任何人都知道有更好的方式来写这个吗?
由于
答案 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);
我不认为最后一种方法值得麻烦,因为数据的来源非常不透明。