我有 lodash 用于此(或下划线)。我正在尝试获取一组对象并将它们变成一个简化的对象数组。我来给你展示。
$scope.myObject = [{
name: 'Name1',
subs: [
{
name: 'Sub 1',
subs: [
{
name: 'Sub 1-1',
apps: [
{
name: 'App 1'
}
]
}
],
apps: [
{
name: 'App'
}
]
}
这是原始对象(至少它的一个节点)。我想要的效果是将它归结为一组对象,这些对象只是“应用程序”。正如您在此处看到的,应用程序可以落在任何级别 - 因此它需要某种深度搜索/减少。这些对象可能有 10 个级别的深度,并且在任何级别上都有一个应用程序数组。所以我试图将它归结为一个仅包含应用程序的平面数组,例如这个对象将变成:
[{'name' : 'App 1'},{'name' : 'App'}];
我对这种对象操作还是很陌生,所以我可以使用一些指导。谢谢!
最佳答案
function pluckRecursive(input, prop, collect) {
collect = collect || [];
if (_.isArray(input)) {
_.forEach(input, function (value, key) {
pluckRecursive(value, prop, collect);
})
} else if (_.isObject(input)) {
_.forEach(input, function (value, key) {
if (key === prop) {
collect.push(value);
} else {
pluckRecursive(value, prop, collect);
}
})
}
return collect;
};
像这样使用时
pluckRecursive($scope.myObject, 'apps')
返回:
[[{"name":"App 1"}], [{"name":"App"}]]
在上面使用 _.flatten()
去除嵌套数组。
关于javascript - 对象数组的深度减少(可能是采摘?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28238963/