javascript - 对象数组的深度减少(可能是采摘?)

标签 javascript lodash

我有 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/

相关文章:

javascript - 如何在具有冲突库的网站上正确包含 lodash/下划线?

javascript - 将 lodash 与 Angularjs 结合使用

javascript - 如何在 'lodash' 函数(debounce)回调函数内部传递参数?

javascript - AngularJS ngmodel 绑定(bind)说明?

javascript - 在背景颜色功能下添加背景图像

javascript - validator.js with bootstrap 你如何知道你的表单在 AJAX 表单上有效?

javascript - 使用 Protractor 测试 UI-bootstrap-alert

javascript - lodash SortBy 对象内容

javascript - 使用 react/redux 去抖文本区域输入

javascript - 为什么 JS Join 在第一个值之前添加分隔符?