簡體   English   中英

如何搜索所有級別的嵌套Javascript對象

[英]How to search all levels nested Javascript object

我有一個Javascript對象,它表示一個嵌套的JSON字符串,如下所示:

http://pastebin.com/vwZb1XrA

有許多級別包含“名稱”元素。 例如“ SVI”或“人口”或“人類發展指數”。

我試圖找到一種方法來遍歷對象的每個級別,以找到名稱“ SVI”或“人口”或“人類發展指數”。 進行匹配時,我想用以下內容替換權重值:

if (data[key].name == name) {
    data[key].weight = 55;
}

您可以像這樣遞歸檢查每個對象

function rec(currentObject, values, replacement) {
    if (values.some(function(currentValue) {
        return currentObject.name === currentValue;
    })) {
        currentObject.weight = replacement;
    }
    (currentObject.children || []).forEach(function(currentItem) {
        rec(currentItem, values, replacement);
    });
}

rec(data, ["SVI", "Population", "Human Development Index"], 55);
console.log(data);

Working demo

您可以使用遞歸函數,因此,如果您只想使用特定名稱更新第一個對象,則如下所示:

function search(name, value, object) {
    if (object.name == name) { 
        object.weight = value; 
        return; 
    }
    if(object.children) {
        var i = object.children.length;
        while(i--) {
            search(name, value, object.children[i]);
        }
    }
}

這將更新而不會返回任何內容。 如果刪除return語句,它將使用您指定的名稱更新所有對象。

您需要一個遞歸函數,它將遍歷每個元素並處理其子元素。 這樣的事情可能會起作用:

function ChangeWeightsOfName(arr, nameVal) {
    for (var i = 0; i < arr.length; i++) {
        var item = arr[i];
        if (item.name === nameVal) {
            item.weight = 42;
        }
        if (item.children && Array.isArray(item.children)) {
            ChangeWeightsOfName(item.children, nameVal);
        }
    }
}

您粘貼的JSON似乎無效,因此我在此Fiddle中包括了測試一個

暫無
暫無

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

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