ChatGPTにお願いして、objectをフラットにする関数を作ってもらった

起こったこと

ネストされたobjectを1階層までにフラット化する関数を書きたいと考えた。

例えば以下のようなobject1をobject2にするような感じである。

const object1 = {
  key1: value1,
  key2: {
    key2-1: value2-1,
    key2-2: value2-2
  }
};

const object2 = flatObject(object1);
console.log(object2);
/*
{
  key1: value1,
  key2.key2-1: value2-1,
  key2.key2-2: value2-2,
};
*/

しかし、それを作るには1日かかりそうな感じがした。

そこで課金したばかりのChatGPTのGPT4に関数作成の依頼をすることにした。

お願いしたこと

わたし

あなたはプログラマーです。ネストされた連想配列を受け取ると、単一にネストされた値に変換する関数を書いてください。

GPT4

あなたが求めている機能は、ネストされた連想配列(オブジェクト)をフラットな構造に変換することですね。以下のJavaScriptコードは、その目的を達成するための簡単な関数です。

このお願いをした時点でほぼ完ぺきなJavaScriptの関数が返ってきた。驚愕する。

この後、Typescriptにしてもらったり、配列を受け取ったときはkey[i]と表示するようにしてくださいという曖昧な要望を伝えるだけで以下のようなコードを出してもらった

type NestedObject = {
  [key: string]: any;
};

function flattenObject(obj: NestedObject, parentKey = '', result: NestedObject = {}): NestedObject {
  for (const key in obj) {
    if (typeof obj[key] === 'object' && obj[key] !== null) {
      const newKey = parentKey ? `${parentKey}.${key}` : key;
      if (Array.isArray(obj[key])) {
        obj[key].forEach((value, index) => {
          flattenObject({ [`${newKey}[${index}]`]: value }, '', result);
        });
      } else {
        flattenObject(obj[key], newKey, result);
      }
    } else {
      const newKey = parentKey ? `${parentKey}.${key}` : key;
      result[newKey] = obj[key];
    }
  }
  return result;
}

const nestedObject: NestedObject = {
  a: {
    b: 1,
    c: {
      d: 2,
      e: [1, 2, 3],
    },
  },
  f: {
    g: {
      h: {
        i: { j: 4 },
      },
    },
  },
};

const flattenedObject: NestedObject = flattenObject(nestedObject);
console.log(flattenedObject);
{
  "a.b": 1,
  "a.c.d": 2,
  "a.c.e[0]": 1,
  "a.c.e[1]": 2,
  "a.c.e[2]": 3,
  "f.g.h.i.j": 4
}

私なら丸1日掛かったと思うコードを、5分も満たないやり取りで作成することが出来た。とても時短になった。