使用lodash

时间:2016-08-17 07:53:14

标签: javascript javascript-objects lodash

对于给定的结构:

[{
    file: [{
        en: 'asset_string_en.jpg'
    }, {
        ch: 'assets_string_ch.jpg'
    }],

    assetName: 'assetName1'
}, {
    file: [{
        en: 'asset_string2_en.jpg'
    }, {
        ch: 'asset_string2_ch.jpg'
    }],

    assetName: 'assetName2'
}]

我想为每个assetName创建一个对象,其值由这些键分组[' en'' ch']:

{
'assetName1':'asset_string_en.jpg',
'assetName2':'asset_string2_en.jpg'
}

{
'assetName1':'asset_string_ch.jpg',
'assetName2':'asset_string2_ch.jpg'
}

我怎么能用lodash做到这一点?

2 个答案:

答案 0 :(得分:1)

在普通的Javascript中,您可以使用一些循环来创建结果集。



var data = [{ file: [{ en: 'asset_string_en.jpg' }, { ch: 'assets_string_ch.jpg' }], assetName: 'assetName1' }, { file: [{ en: 'asset_string2_en.jpg' }, { ru: 'asset_string2_ch.jpg' }], assetName: 'assetName2' }],
    result = [];

data.forEach(function (a) {
    a.file.forEach(function (b, i) {
        Object.keys(b).forEach(function (k) {
            result[i] = result[i] || {};
            result[i][a.assetName] = b[k];
        });
    });
});

console.log(result);




答案 1 :(得分:1)

使用es6 fat箭头表示法:

var arr = [{
    file: [{
        en: 'asset_string_en.jpg'
    }, {
        ch: 'assets_string_ch.jpg'
    }],

    assetName: 'assetName1'
}, {
    file: [{
        en: 'asset_string2_en.jpg'
    }, {
        ru: 'asset_string2_ch.jpg'
    }],

    assetName: 'assetName2'
}];

_.reduce(arr, (answer, obj)=> {answer[_.get(obj, 'file[0].en')] = _.get(arr[0], 'file[1].ch'); return answer}, {});