![](/img/trans.png)
[英]Better / Faster way to extract value with a matched property on different depth on a nested object with condition
[英]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.