素肌にサスペンダー

個人的な備忘と日記

【JavaScript】JSONの一部の値を書き換えたい時の関数

ネストされた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;
}