簡體   English   中英

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

[英]Better / Faster way to modify all matched property found under different depth from a nesting object

我從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); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM