所以,我有以下数组:
const objectArray = [
{
'proyectId': 1,
'fieldName': 'dog',
'fieldValue': 'wof'
},
{
'proyectId': 1,
'fieldName': 'cat',
'fieldValue': 'meow'
}
];
例如,使用JS reduce或类似的方法,如何将其转换为这样:
[
{
proyectId: 1,
customFields: [
{'fieldName':'dog', 'fieldValue': 'wof'},
{'fieldName':'cat', 'fieldValue': 'meow'}
]
}
]
答案 0 :(得分:1)
您可以使用Array.reduce
通过键(proyectId
索引对象,然后使用Object.values
仅检索值:
const input = [{'proyectId': 1, 'fieldName': 'dog', 'fieldValue': 'wof'}, {'proyectId': 1, 'fieldName': 'cat', 'fieldValue': 'meow'}];
const result = Object.values(input.reduce((map, {proyectId, ...fields}) => {
map[proyectId] = map[proyectId] || {proyectId, customFields: []};
map[proyectId].customFields.push(fields);
return map;
}, {}));
console.log(result);
PS:如前所述,请下次再分享您的尝试。
答案 1 :(得分:0)
使用Array.reduce()
通过proyectId
将数组转换为Map。使用[proyectId, customFields]
将Map转换为条目数组(Array.from()
),然后使用Array.map()
将条目转换为对象格式:
const objectArray = [{"proyectId":1,"fieldName":"dog","fieldValue":"wof"},{"proyectId":1,"fieldName":"cat","fieldValue":"meow"}];
const result = Array.from(
objectArray.reduce((r, { proyectId, ...o }) =>
r.set(proyectId, [...r.get(proyectId) || [], o])
, new Map())
).map(([proyectId ,customFields]) => ({
proyectId,
customFields
}));
console.log(result);