【发布时间】:2020-05-06 20:18:57
【问题描述】:
今天我不得不合并两个对象,选择对象a 的属性并将它们放入对象b。我不明白为什么第一个语法/语句不起作用,而第二个是。
let user = { a: 1, b: 2 };
let data = { z: 1, c: 3, f: 8, d: 4 };
// Let's say I want user to be { a: 1, b: 2, c: 3}
// method 1 (not works)
const r1 = {
...user,
...({c} = data)
};
document.getElementById("r1").innerText = JSON.stringify(r1);
// method 2 (works)
const r2 = {
...user,
...(({c}) => ({c}))(data)
};
document.getElementById("r2").innerText = JSON.stringify(r2);
你可以试试https://jsfiddle.net/Ljb7ndp4/6/上的代码
【问题讨论】:
-
好吧
{c} = data正在创建一个变量c而不是对象console.log(c)会显示 3 -
是的,您的全局范围现在包含一个变量 c,其中包含 data.c 的内容。表达式 ({c} = data) 返回原始对象,这就是为什么 r1 包含两个对象的合并内容。
-
在第二种情况下,您正在调用匿名函数,将
data传递给参数,然后您将解构提取c的参数,该函数最终返回一个带有c 的对象跨度> -
@epascarello 你说得对,我还没有考虑过,谢谢
标签: javascript ecmascript-6 destructuring