我有一个嵌套的Object :(表单示例)
int[] decodedCodes = DecodeCharCode(decodingText.Text);
const result = { '1':
{ 'a':
[ { id: '1',
sndid: 'a',
type: 'ios',
value: '55',
weight: 2
},
{ id: '1',
sndid: 'a',
sumvalue: 2 },
{ id: '1',
sndid: 'a'},
{ id: '1',
sndid: 'a',
calcsum: '3' } ],
'2':
[ { id: '1',
sndid: 'b',
type: 'ios',
value: '55',
weight: 3
},
{ id: '1',
sndid: 'b',
sumvalue: 3 },
{ id: '1',
sndid: 'b'},
{ id: '1',
sndid: 'b',
calcsum: '7' } ] },
'3':
{ 'a':
[ { id: '3',
sndid: 'a',
type: 'ios',
value: '55',
weight: 23},
{ id: '3',
sndid: 'a',
sumvalue: 4 },
{ id: '3',
sndid: 'a',
sumvalue_old: '4' },
{ id: '3',
sndid: 'a',
calcsum: '5' } ] },
}
const assignedobject = {};
_.forEach(result, (values) => {
_.forEach(values, (vals) => {
_.forEach(vals, (val) => {
_.assign(assignedobject, val);
});
});
});
console.log(assignedobject)
使用此对象中的值,我想计算多个值。在此之前,我想将此Object转换为(更易读)对象。
每个“id”都有多个“sndid”。所以我想通过“id”和“sndid”对对象进行分组。
(例如,转换后的Object应具有此结构)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
我尝试循环进入所有嵌套对象并将其分配给新对象。但他只是将最后一个循环推入我的对象。代码看起来也很糟糕。
结果与示例相似,但他只占用最后一个对象。
答案 0 :(得分:0)
递归flatMap变体:
const result = { '1':
{ 'a':
[ { id: '1',
sndid: 'a',
type: 'ios',
value: '55',
weight: 2
},
{ id: '1',
sndid: 'a',
sumvalue: 2 },
{ id: '1',
sndid: 'a'},
{ id: '1',
sndid: 'a',
calcsum: '3' } ],
'2':
[ { id: '1',
sndid: 'b',
type: 'ios',
value: '55',
weight: 3
},
{ id: '1',
sndid: 'b',
sumvalue: 3 },
{ id: '1',
sndid: 'b'},
{ id: '1',
sndid: 'b',
calcsum: '7' } ] },
'3':
{ 'a':
[ { id: '3',
sndid: 'a',
type: 'ios',
value: '55',
weight: 23},
{ id: '3',
sndid: 'a',
sumvalue: 4 },
{ id: '3',
sndid: 'a',
sumvalue_old: '4' },
{ id: '3',
sndid: 'a',
calcsum: '5' } ] },
}
const extractSndid = item => {
if (_.isArray(item)) {
return _.map(item, i => _.assign(...i));
}
return extractSndid(_.values(item))
}
const assignedobject = _.flatMap(result, extractSndid);
console.log(assignedobject)
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
&#13;