[英]How to search all levels nested Javascript object
我有一個Javascript對象,它表示一個嵌套的JSON字符串,如下所示:
有許多級別包含“名稱”元素。 例如“ 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);
您可以使用遞歸函數,因此,如果您只想使用特定名稱更新第一個對象,則如下所示:
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.