Object.assign删除现有属性

Cor*_*ell 7 javascript

我可能误解了Object.assign()它是如何工作的,但我并不期望它能删除现有的财产,例如:

var o1 = { "status":"", "app":{"version":"1.3.1.91","latest_version":"1.3.1.91"} }
var o2 = { "status":"listening", "app":{"latest_version":"1.3.2.879"} }

console.log(Object.assign({}, o1, o2));
Run Code Online (Sandbox Code Playgroud)

输出: {"status":"listening","app":{"latest_version":"1.3.2.879"}}

我的预期是: {"status":"listening", "app":{"version":"1.3.1.91", "latest_version":"1.3.2.879"}}

我想这是因为它是一个嵌套对象?有没有让它自动更新嵌套对象(即没有指定哪些)没有任何库?

谢谢

Fal*_*aly 5

Object.assign 无法管理嵌套对象。您必须循环遍历对象的属性。

下面的代码管理您的情况,但如果您想使用更多嵌套对象,请递归地执行该过程

var o1 = { "status":"", "app":{"version":"1.3.1.91","latest_version":"1.3.1.91"} };
var o2 = { "status":"listening", "app":{"latest_version":"1.3.2.879"} };

var output = {};
Object.keys(o2).forEach(key => {
    if (o2[key] instanceof Object) {
        output[key] = Object.assign({}, o1[key], o2[key]);
    } else {
        output[key] = o2[key];
    }
});

console.log(output);
Run Code Online (Sandbox Code Playgroud)