はじめに
この実験では、JavaScript の deepMapKeys 関数を使ってオブジェクトのキーを再帰的にマッピングする方法を探ります。各キーに対して提供された関数を使って、同じ値とマッピングされたキーを持つ新しいオブジェクトを作成する方法を学びます。実践的な演習と例を通じて、この関数がどのように機能するか、また実際のシナリオでどのように使えるかを理解します。
オブジェクトのキーを再帰的にマッピングする
オブジェクトのキーを再帰的にマッピングするには、次の手順に従います。
- ターミナル/SSH を開き、コーディングを練習するために
nodeと入力します。 - 提供されたオブジェクトと新しいキーを生成する関数を使って
deepMapKeys関数を使用します。 - この関数は、提供されたオブジェクトと同じ値を持ち、各キーに対して提供された関数を実行することで生成されたキーを持つオブジェクトを作成します。
Object.keys()を使ってオブジェクトのキーを反復処理します。Array.prototype.reduce()と提供された関数を使って、同じ値とマッピングされたキーを持つ新しいオブジェクトを作成します。- 値がオブジェクトの場合、そのキーもマッピングするために再帰的に
deepMapKeysを呼び出します。
const deepMapKeys = (obj, fn) =>
Array.isArray(obj)
? obj.map((val) => deepMapKeys(val, fn))
: typeof obj === "object"
? Object.keys(obj).reduce((acc, current) => {
const key = fn(current);
const val = obj[current];
acc[key] =
val !== null && typeof val === "object"
? deepMapKeys(val, fn)
: val;
return acc;
}, {})
: obj;
以下は、deepMapKeys の使用例です。
const obj = {
foo: "1",
nested: {
child: {
withArray: [
{
grandChild: ["hello"]
}
]
}
}
};
const upperKeysObj = deepMapKeys(obj, (key) => key.toUpperCase());
/*
{
"FOO":"1",
"NESTED":{
"CHILD":{
"WITHARRAY":[
{
"GRANDCHILD":[ 'hello' ]
}
]
}
}
}
*/
まとめ
おめでとうございます!オブジェクトのキーを再帰的にマッピングする実験を終えました。技術力を向上させるために、LabEx でさらに実験を練習してください。