我有一个Javascript对象,代表一个嵌套的JSON字符串,如下所示:
有许多级别包含“name”元素。例如“SVI”或“人口”或“人类发展指数”。
我试图找到一种方法来迭代对象的每个级别,以找到名称“SVI”或“人口”或“人类发展指数”。当匹配时,我想用这样的东西替换权重值:
if (data[key].name == name) {
data[key].weight = 55;
}
答案 0 :(得分:1)
您可以递归检查每个对象,例如
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);
答案 1 :(得分:0)
您可以使用递归函数,因此如果您只想更新具有特定名称的第一个对象,请执行以下操作:
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语句,它应该使用您指定的名称更新所有对象。
答案 2 :(得分:0)
您需要一个递归函数,它将遍历每个元素并处理其子元素。这样的事情可能有用:
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
中包含了测试1