慕斯709654
尝试如下。内部减少功能。查找您的组键是否已存在于结果对象中。如果不存在,则创建新对象并添加到返回对象。将当前对象的组添加到分组对象返回结果对象注意: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);
沧海一幻觉
使用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)