Ger*_*int 6 javascript ecmascript-6
我试图解构一个对象并将取出的变量应用到它自己的对象中.
例如,对象beforeTest包含a,b,c,d
我想把{a,b}输出并添加到afterTest对象.
就像是...
let afterTest = { a, b } = beforeTest
Run Code Online (Sandbox Code Playgroud)
以下是有效的,但是当你有很多变量时它们并不是很漂亮.
let { a, b } = beforeTest;
let afterTest = Object.assign({}, a, b); //EDIT: This doesn't actually do what I intended, see comment on my question
Run Code Online (Sandbox Code Playgroud)
谁知道有更好的方法来写这个?
谢谢
解构和对象速记在这里是最好的朋友。
要从对象中选择一些属性并使用该子集创建新对象,您可以简单地执行以下操作:
let {a, b} = beforeTest;
let afterTest = {a, b};
Run Code Online (Sandbox Code Playgroud)
为此提供一行语法没有多大意义,因为当前语法很容易扩展到多个源/接收器:
let {a1, b1} = beforeTest;
let {a2, b2} = midTest;
let aN = {a1, a2}, bN = {b1, b2};
Run Code Online (Sandbox Code Playgroud)
如果您的源没有重复的属性(即源 1 和 2 中只有一个具有 field a),则可以使用 map (pluck) 和 reduce 在一行中完成此工作:
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);
Run Code Online (Sandbox Code Playgroud)
我认为最后一种方法不值得麻烦,因为它对于数据的来源相当不透明。
| 归档时间: |
|
| 查看次数: |
1370 次 |
| 最近记录: |