如何更新动态选择的json密钥

时间:2014-05-10 17:49:06

标签: javascript arrays json

我试图找出如何创建一个泛型函数,该函数使用数组获取jsonObj的路径,然后更新数组中的最后一个键。

PS!这可能是我们错误的方法,所以请随意展示如何解决这个问题的其他例子。

最后应更新数据对象。

这是我到目前为止所提出的

    data = {
    'level1_1': {
        'level2_1': {
            'no1': 1,
            'no2': 2
        }
    },
    'level1_2': {
        'level2_2': {
            'no1': 10,
            'no2': 20
        }
    }    
}

var updateJson = function(path, value){
    var a = data;
    path.forEach(function(e){
        a = a[e];
    });
    return a;
};

updateJson(['level1_2','level2_2','no2'], 100); 

在这个例子中,我想更新值为100

的no2键

1 个答案:

答案 0 :(得分:0)

您可以使用递归执行此操作:

function updateJson(path,val,obj) {
  if (!obj) obj = data; 
  if (path.length < 2) { 
    obj[path[0]] = val; 
  } else {
    if (!obj[path[0]]) obj[path[0]] = {};
    obj = obj[path.shift()]; 
    updateJson(path,val,obj); 
  }    
}

updateJson(['level1_2','level2_2','no2'], 100); 
console.log(data.level1_2.level2_2.no2)//100