我正在学习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
    };
});

07-24 09:44
查看更多