对于给定的结构:
[{
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做到这一点?
答案 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}, {});