For the given structure:
[{
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'
}]
I want to make an object for each assetName with values grouped by these keys ['en', 'ch']:
{
'assetName1':'asset_string_en.jpg',
'assetName2':'asset_string2_en.jpg'
}
{
'assetName1':'asset_string_ch.jpg',
'assetName2':'asset_string2_ch.jpg'
}
How can I do this with lodash?
In plain Javascript, you could use some loops for creating the result set.
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);
Using es6 fat arrow notation:
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}, {});
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.