javascript - 递归更新 Javascript 对象

标签 javascript json recursion

我有一个嵌套对象,我想用对象提供的值更新它,该对象包含类似的结构,但只包含我想更新的属性。创建新结果而不是修改初始对象也很棒。

    var initial = 
      { 
         a: 1, 
         b : { 
            c : 2, 
            d : 3 
         },
         f: 5 
      }; 

    var update = {
        a: 2,
        b: {
           d: 2
        }
    };         
    function updateFunction (a,b) {  return a+b;};
    var result= 
      { 
         a: 3, // updateFunction (1,2)=> 3
         b : { 
            c : 2, 
            d :5 // updateFunction (3,2) => 5
         },
         f: 5 
      };  

最佳答案

还没有完全测试,但也许,

假设对象很简单,

function updateFunction (a,b) {  return a + b;};    

function recurse(initial, update){
    for(prop in initial){
        if({}.hasOwnProperty.call(initial, prop) && {}.hasOwnProperty.call(update, prop)){
            if(typeof initial[prop] === 'object' && typeof update[prop] === 'object'){
                recurse(initial[prop], update[prop]);
            }
            else{
                initial[prop] = updateFunction(initial[prop], update[prop]);
            }
        }
    }
}
recurse(initial, update);

编辑

如果不改变初始结果是预期的

function updateFunction (a,b) {  return a + b;};

function recurse(initial, update){
    var result = {};
    for(prop in initial){
        if({}.hasOwnProperty.call(initial, prop)){
            result[prop] = initial[prop];    
            if({}.hasOwnProperty.call(update, prop)){
                if(typeof initial[prop] === 'object' && typeof update[prop] === 'object'){
                    result[prop] = recurse(initial[prop], update[prop]);
                }
                else{
                    result[prop] = updateFunction(initial[prop], update[prop]);
                }
            }
        }    
    }
    return result;
}
var result = recurse(initial, update);

希望这对您有所帮助。

关于javascript - 递归更新 Javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16384295/

相关文章:

javascript - 如何使用 WordPress REST api 从我的 Angular 应用程序中提取更多 WordPress 帖子

javascript - 仅在页 footer 分打印最后一页底部的表页脚

php - json 数据未显示在结果 div 中

javascript - 在CouchDB中使用JSON模式

关联 PHP 数组中的 Javascript 数组/对象顺序

c++ - Tower of Hanoi - n peg 求解算法

javascript - 在 node.js 中 for 循环完成后的回调

java - 二叉搜索树删除方法错误

python - python 中递归地集合中的所有子集(Nonetype 错误)

javascript - 如何搜索项目、返回其 ID 并更新 Azure 移动服务中的记录