给定一个像这样的嵌套对象:
var cars = {
"bentley": {
"suppliers": [
{
"location": "England",
"name": "Sheffield Mines"}
]
// ...
}
};
和这样的数组["bentley", "suppliers", "0", "name"]
,是否有一个现有的函数可以采摘最深的元素,即pluck_innards(cars, ['bentley', "suppliers", "0", "name"])
返回“谢菲尔德矿山”。
换句话说,是否有一个函数(我将命名deep_pluck
)
deep_pluck(cars, ['bentley', 'suppliers', '0', 'name'])
=== cars['bentley']['suppliers']['0']['name']
在我看来,这很简单,但很常见,可能已经在 Javascript 实用程序库之一中完成,例如jQuery或lo-dash /underscore - 但我还没有看到它。
我的想法是微不足道的,大致如下:
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 上发布了。
如果该函数足够聪明,可以识别何时需要数组中的数字索引,那当然会有所帮助。我不确定还有哪些其他警告可能是一个问题。
对于我认为已经巧妙解决的问题,这是一个相当长的问题,但我想发布这个,因为我想看看有什么解决方案。