javascript - lodash:根据对象的子数组创建数组

标签 javascript lodash

我正在学习Lodash这是一个 JavaScript 库。

在这里,我有一个像这样的对象:

场景#1:

{
    name: 'abc'
    email: 'abc@example.com'
    z: [
        {
            time: '<any-time>',
            t: 't1'
        },
        {
            time: '<any-time>',
            t: 't2'
        },
        {
            time: '<any-time>',
            t: 't3'
        }
    ]
}

我想要使用 lodash 得到这个结果:

[
    {
        name: 'abc'
        email: 'abc@example.com'
        z: [
            {
                time: '<any-time>',
                t: 't1'
            }           
        ]
    },
    {
        name: 'abc'
        email: 'abc@example.com'
        z: [
            {
                time: '<any-time>',
                t: 't2'
            }           
        ]
    },
    {
        name: 'abc'
        email: 'abc@example.com'
        z: [
            {
                time: '<any-time>',
                t: 't3'
            }           
        ]
    }
]

场景#2:

{
    name: 'abc'
    email: 'abc@example.com'
    z: [
        {
            time: '<any-time>',
            t: 't1'
        },
        {
            time: '<any-time>',
            t: 't1'    // see here t1 repeated
        },
        {
            time: '<any-time>',
            t: 't3'
        }
    ]
}

那么结果应该是:

[
    {
        name: 'abc'
        email: 'abc@example.com'
        z: [
            {
                time: '<any-time>',
                t: 't1'
            },
            {
                time: '<any-time>',
                t: 't1'
            }           
        ]
    },
    {
        name: 'abc'
        email: 'abc@example.com'
        z: [
            {
                time: '<any-time>',
                t: 't3'
            }           
        ]
    }
]

如果您不清楚我的详细信息,请告诉我。

谢谢:)

编辑: 我尝试了以下代码,

var finalArr = [];
var baseInfo = _.omit(obj, 'z');
var childArr = obj.z;
for(var j = 0; j < childArr.length; j++){
    var flattenObj = angular.copy(baseInfo);
    flattenObj.z = [];
    flattenObj.z.push(childArr[j]);
    finalArr.push(flattenObj);
}

它只是处理场景#1。我认为它比 lodash 使用更多的 javascript。

最佳答案

此代码适用于两种情况:

// I assume obj is the input object
var result = _.map(obj.z, function(value) {
    return {
        z : value,
        name : obj.name,
        email : obj.email
    };
});

请注意,对于此示例,您根本不需要 lodash。你可以简单地这样写:

// I assume obj is the input object
var result = obj.z.map(function(value) {
    return {
        z : value,
        name : obj.name,
        email : obj.email
    };
});

关于javascript - lodash:根据对象的子数组创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33300900/

相关文章:

javascript - 如何使用 javascript 或 lodash 过滤嵌套数组

javascript - 如何实现在调整浏览器窗口大小时缩放的网页?

javascript - 如何在javascript中过滤多个值(或运算)

JavaScript : Make an array of value pairs form an array of values

javascript - Lodash 中的 partialRight 似乎什么都不做

javascript - 如何制作一个 selectAll 复选框并触发 ng-click 每个复选框的每个功能?

c# - 使 Javascript 代码在 Page Start 上运行

javascript - Angular 中使用模态窗口进行 Ng 重复和自动完成选择

javascript - 带有 express-jwt 的 JSONWebTokens VS passport-jwt

javascript - 查找是否有任何数组条目与对象属性匹配