次のようなネストされたオブジェクトがあるとします。
var cars = {
"bentley": {
"suppliers": [
{
"location": "England",
"name": "Sheffield Mines"}
]
// ...
}
};
このような配列["bentley", "suppliers", "0", "name"]
、つまり、最も深い要素を抽出する既存の関数はありますか。つまりpluck_innards(cars, ['bentley', "suppliers", "0", "name"])
、「Sheffield Mines」を返します。
言い換えれば、関数 (名前を付けますdeep_pluck
) はありますか?
deep_pluck(cars, ['bentley', 'suppliers', '0', 'name'])
=== cars['bentley']['suppliers']['0']['name']
これは単純ですが、jQueryやlo-dash /underscore などの Javascript ユーティリティ ライブラリの 1 つでおそらく行われているほど一般的であるように思えますが、私はそれを見たことがありません。
私の考えは、次のような些細なことです。
function deep_pluck(array, identities) {
var this_id = identities.shift();
if (identities.length > 0) {
return deep_pluck(array[this_id], identities);
}
return array[this_id];
}
私はjsFiddleに投稿しました。
もちろん、配列内の数値インデックスがいつ必要になるかを識別するのに十分なほど関数がスマートであれば、それは役に立ちます。他にどのような注意事項が懸念されるかはわかりません。
これはすべて、すでに巧妙に解決されていると私が想像するものに対するかなり長い質問ですが、そこにどのような解決策があるのか に興味があるので、これを投稿することにしました.