Javascript 遍历对象并在子对象中插入丢失的键

标签 javascript object nested

我需要同步两个 javascript 对象,我想用 object1 中缺少的键填充 object2,而不替换现有的,即使是嵌套的:

var object1 = {
    firstName: "Marco",
    lastName: "Rossi",
    favoriteFood: {firstCourse: "pasta", secondCourse: "salsiccia"},
    favoriteDrink: "Vino",
    favoriteSong: "O sole mio"
}

var object2 = {
    firstName: "Marco",
    lastName: "Rossi",
    favoriteFood: {firstCourse: "pasta"},
    favoriteSong: "Viaggiare"
}

我真的不知道如何进入嵌套键。特别是要继续检查内部嵌套,如果你有 5 个嵌套或类似的东西怎么办我知道如何处理第一层但不能再往下。

objec2 的期望结果是

var object2 = {
    firstName: "Marco",
    lastName: "Rossi",
    favoriteFood: {firstCourse: "pasta", secondCourse: "salsiccia"},
    favoriteDrink: "Vino",
    favoriteSong: "Viaggiare"
}

预先感谢您的帮助。

最佳答案

您需要编写递归函数来处理嵌套对象。也许是这样的:

var object1 = {
    firstName: "Marco",
    lastName: "Rossi",
    favoriteFood: {firstCourse: "pasta", secondCourse: "salsiccia"},
    favoriteMovie: {rating: 7, title: "Monday"},
    favoriteDrink: "Vino",
    favoriteSong: "O sole mio"
}

var object2 = {
    firstName: "Marco",
    lastName: "Rossi",
    favoriteFood: {firstCourse: "pasta"},
    favoriteSong: "Viaggiare"
}

function fillObject(from, to) {
    for (var key in from) {
        if (from.hasOwnProperty(key)) {
            if (Object.prototype.toString.call(from[key]) === '[object Object]') {
                if (!to.hasOwnProperty(key)) {
                    to[key] = {};
                }
                fillObject(from[key], to[key]);
            }
            else if (!to.hasOwnProperty(key)) {
                to[key] = from[key];
            }
        }
    }
}

fillObject(object1, object2);

alert( JSON.stringify(object2, null, '    ') );

注意:如果您想知道这一行 Object.prototype.toString.call(from[key]) - 这是为了可靠地检查该值是一个对象,因为 typeof null 还报告 object

关于Javascript 遍历对象并在子对象中插入丢失的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26546090/

相关文章:

javascript - 连续事件不适用于从上一个事件创建的元素

python - 绑定(bind)和未绑定(bind)方法对象的 id() --- 有时不同对象相同,有时相同对象不同

javascript - React - 检查元素在 DOM 中是否可见

javascript - 如何通过jquery给jsp页面中的label设置值

javascript - Angular + requirejs - Controller 无法从工厂获取ajax返回数据?

Javascript:使用动态变量名称访问 JSON 数据中的嵌套值

python - 如何将嵌套函数作为参数传递

javascript - 我们可以将类型分配给变量中声明的对象吗(模块化编程)

c++ - 如何根据 C++ 标准访问对象表示?

python - Python中函数定义后的变量赋值