【发布时间】:2019-09-06 10:42:03
【问题描述】:
我正在尝试使用带有递归函数的打字稿更改 json 值。我知道如何显示所有键或值,但我不知道如何更改值。
我有这个 json 和这个代码:
var json = {
"a" : "hello",
"b" : "bye",
"c" : {
"d" : "test1",
"e" : "test2"
},
"f" : {
"g" : {
"h" : "test3",
"i" : "test4"
}
}
};
changeInJson(id: string, value: string, level: number, json: object): void {
level = level || 0;
for (var property in json) {
if (typeof json[property] === 'object') {
this.changeInJson(id, value, ++level, json[property]);
} else {
console.log(property);
if(property === id) {
//change value in json
console.log("Yes");
}
}
}
};
changeInJson("i", "changed", 0, json);
console.log(json);
在这个例子中,我知道 json 键,但实际上我需要以某种方式保存到达键“i”的所有路径,这就是我不知道该怎么做。
谢谢
【问题讨论】:
-
changeInJson("i", "changed", 0, json);意味着什么要改变? 0 级没有i... -
...或者你想改变所有
i,而不考虑深度? -
在这种情况下,我从级别 0 开始,因为我想迭代所有 json 并且当再次调用该函数时,增加级别。在这种情况下,最终目标是在不知道 'i' 的值在 f.g.i 中的情况下更改 'i' 的值
-
看我的回答。级别在这里无关紧要,递归的终止情况是对象不再包含对象。
-
@dgalan 我想你可以在这里使用 Lodash。 lodash.com/docs/4.17.11#set
标签: json typescript loops recursion