使用 lodash 按键从另一个对象的组中创建一个对象

Create an object from another object's group by key using 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 执行此操作?

在普通 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);

使用 es6 粗箭头表示法:

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}, {});