2 回答

TA贡献1840条经验 获得超5个赞
尝试如下。
内部减少功能。
查找您的组键是否已存在于结果对象中。
如果不存在,则创建新对象并添加到返回对象。
将当前对象的组添加到分组对象
返回结果对象
注意:reduce
第二个参数是您的返回对象。
let users = [{
user: {
idUser: 2,
name: "Alain",
age: 23
},
role: {
codeRole: 'ADM',
label: 'Administrator'
},
group: {
idGroup: 3,
nomGroup: 'RH personnes'
}
},
{
user: {
idUser: 2,
name: "Alain",
age: 23
},
role: {
codeRole: 'ADM',
label: 'Administrator'
},
group: {
idGroup: 8,
nomGroup: 'Finance personnes'
}
},
{
user: {
idUser: 8,
name: "Jhon",
age: 33
},
role: {
codeRole: 'ADM',
label: 'Administrator'
},
group: {
idGroup: 3,
nomGroup: 'RH personnes'
}
},
{
user: {
idUser: 8,
name: "Jhon",
age: 33
},
role: {
codeRole: 'GEST',
label: 'RH Helper'
},
group: {
idGroup: 3,
nomGroup: 'RH personnes'
}
},
];
function groupBy(r, u) {
// find if your group key already exists or not.
let obj = r.find(x => x.user.idUser == u.user.idUser && x.role.codeRole == u.role.codeRole);
// if not exist then create new object and add to return object.
if (!obj) {
obj = {
user: u.user,
role: u.role,
groups: []
};
r.push(obj);
}
// add group from current object to grouped object
obj.groups.push(u.group);
// return result object
return r;
}
// in reduce second parameter is your return object.
let result = [];
users.reduce(groupBy, result);
console.log(result);

TA贡献1824条经验 获得超5个赞
使用reduce& findIndex。在 reduce 回调函数中,使用和findIndex查找累加器中是否存在任何对象。如果存在,则更新数组并从组中推送值。idUsercodeRolegroup
如果它不存在,则创建新对象并将 的值推送到group数组中
let users = [{
user: {
idUser: 2,
name: "Alain",
age: 23
},
role: {
codeRole: 'ADM',
label: 'Administrator'
},
group: {
idGroup: 3,
nomGroup: 'RH personnes'
}
},
{
user: {
idUser: 2,
name: "Alain",
age: 23
},
role: {
codeRole: 'ADM',
label: 'Administrator'
},
group: {
idGroup: 8,
nomGroup: 'Finance personnes'
}
},
{
user: {
idUser: 8,
name: "Jhon",
age: 33
},
role: {
codeRole: 'ADM',
label: 'Administrator'
},
group: {
idGroup: 3,
nomGroup: 'RH personnes'
}
},
{
user: {
idUser: 8,
name: "Jhon",
age: 33
},
role: {
codeRole: 'GEST',
label: 'RH Helper'
},
group: {
idGroup: 3,
nomGroup: 'RH personnes'
}
},
];
let newData = users.reduce((acc, curr) => {
const isUserIncluded = acc.findIndex(item => curr.user.idUser === item.user.idUser && curr.role.codeRole === item.role.codeRole);
if (isUserIncluded === -1) {
const tempArray = [];
tempArray.push(curr.group)
acc.push({ ...curr,
group: tempArray
})
} else {
acc[isUserIncluded].group.push(curr.group)
}
return acc;
}, []);
console.log(newData)
添加回答
举报