我想知道是否可以使用rest / spread来覆盖对象的现有属性:
let xy = {
x: 1,
y: 2,
}
let xyz = {
x: 41,
y: 23,
z: 1
}
现在我有两个对象,我希望覆盖xy
上的现有属性,而不从z
获取xyz
属性,因此我的输出如下:
xy = {
x: 41,
y: 23,
}
这可能吗?
提前致谢!
答案 0 :(得分:2)
休息/传播将始终填充到它在源对象中找到的目标,如果您不想使用循环/想要一种功能方法,请转到reduce,例如
const xyNew = Object.keys(xyz).reduce((res, key) =>
// if the key is contained in the accumulator, rewrite it with xyz value, else just return the accumulator (res ~ "result")
res[key] ? { ...res, [key]: xyz[key] } : res
, xy);
答案 1 :(得分:1)
这是一个简单的实现: - )
let xy = {
x: 1,
y: 2,
}
let xyz = {
x: 41,
y: 23,
z: 1
}
function compute(){
let key = Object.keys(xy);
for(let i=0;i<key.length;i++){
if(key[i] in xyz) xy[key[i]] = xyz[key[i]];
}
}
compute();
console.log(xy);