ネストされたJSONオブジェクトの一部の値を書き換えたい場合、以下のような関数でできた。
第二引数のkeysに、objectの上から順に指定すればOK。
function updateJson(obj, keys, value) { let currentObj = obj; for (let i = 0; i < keys.length - 1; i++) { currentObj = currentObj[keys[i]]; } currentObj[keys[keys.length - 1]] = value; return obj; } const obj = { a: { b: { c: 123 } } }; console.log(updateJson(obj, ['a', 'b', 'c'], 0)) /* { "a": { "b": { "c": 0 } } } */
TypeScriptならこんな感じなはず
function updateJson<T>(obj: T, keys: string[], value: any): T { let currentObj: any = obj; for (let i = 0; i < keys.length - 1; i++) { currentObj = currentObj[keys[i]]; } currentObj[keys[keys.length - 1]] = value; return obj; }