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分も満たないやり取りで作成することが出来た。とても時短になった。