当前位置: 代码迷 >> JavaScript >> 更好/更快的方法来修改嵌套对象在不同深度下找到的所有匹配属性
  详细解决方案

更好/更快的方法来修改嵌套对象在不同深度下找到的所有匹配属性

热度:66   发布时间:2023-06-07 16:33:34.0

我从API收到一个JSON,我需要解析和修改一个属性值。 问题是,我收到的json数据的嵌套结构不一致,因此我无法控制它。

这将禁止我指定像parsedJson.children [0] .property这样的特定深度进行查找,因为可以在像parsedJson.children [0] .children [0]这样的不同嵌套级别上找到我要查找的属性。属性在下一次迭代中。

我目前这样做是可行的

var parsedJson = JSON.parse('{"a":[{"a1":[{"p":0},{"np":1}]}],"b":[{"p":0},{"np":1}],"c":[{"c1":[{"c2":[{"p":0}]},{"np":1}]}]}')


console.log("before modify")
console.log(parsedJson)

modifyProperty(parsedJson,"p",1);


function modifyProperty(obj,prop,val){
    for (var key in obj){
            if (key == prop){
            obj[key] = val;
        }
        modifyProperty(obj[key],prop,val);
    }
}

console.log("after modify")
console.log(parsedJson)

但是我担心以后,如果我从API接收到一个包含大量数据和更深层嵌套级别的json,这可能会影响性能,因为这将需要递归检查所有子节点。

有没有更好/更快的方法呢?

您可以将第二个参数传递给JSON.parse ,以递归方式转换所有所需的属性值:

 var parsedJson = JSON.parse( '{"a":[{"a1":[{"p":0},{"np":1}]}],"b":[{"p":0},{"np":1}],"c":[{"c1":[{"c2":[{"p":0}]},{"np":1}]}]}', (key, val) => key === 'p' ? 1 : val ); console.log(parsedJson); 

  相关解决方案