我有一个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]);
}
}
}
这将在不返回任何内容的情况下进行更新。如果您删除返回语句,则应更新所有对象,并使用您指定的名称。
您需要一个递归功能,这将遍历每个元素并处理其子女。这样的事情可能有效:
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似乎没有有效,因此我在此小提琴中包括了一个测试