[英]Better / Faster way to modify all matched property found under different depth from a nesting object
[英]Better / Faster way to extract value with a matched property on different depth on a nested object with condition
我有一個嵌套結構不一致的對象,我無法控制。 如果滿足某個條件,我需要提取某些值。
目前通過遞歸迭代屬性並將屬性與條件匹配並將匹配的值推送到空數組來執行此操作,如下所示:
var obj = {"a":0,"b":{"x":1,"y":100},"c":[{"x":1,"y":120},{"x":2,"y":140}]};
var extracts = [];
extractProp(obj);
function extractProp(obj){
for (var key in obj){
if (key == "x" && obj[key]=="1"){
extracts.push(obj["y"]);
} else {
extractProp(obj[key]);
}
}
}
console.log(extracts); //(2) [100, 120]
這讓我得到了預期的結果。 在我之前的問題中 ,有人通過在JSON.parse上傳遞reviver參數來指出修改json部分的更好方法。 它讓我覺得必須有一個更好的方法來做到這一點。 javascript中是否有本機/內置函數?
不是更好但更快
在這里檢查比較http://jsben.ch/7OZfP
let obj = { "a": 0, "b": { "x": 1, "y": 100 }, "c": [{ "x": 1, "y": 120 }, { "x": 2, "y": 140 }] }; var extracts = []; extractProp(obj); function extractProp() { Object.entries(obj).forEach(([key, val]) => { if (typeof val === 'object') { if (Array.isArray(val)) { val.forEach(gety) } else { gety(val) } } }); } function gety({ x, y }) { if (x == 1 && y) extracts.push(y); } console.log(extracts); //(2) [100, 120]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.