Вы можете использовать reduce
для группировки в объект массивов:
const acl=[{view:!0,update:!0,remove:!0,userId:1,username:"Mike"},{view:!0,update:!0,remove:!1,userId:2,username:"Joe"},{view:!0,update:!1,remove:!1,userId:3,username:"Lim"}];
console.log(
acl.reduce((a, { view, update, remove, userId, username }) => {
const obj = { username, userId };
if (view) a.view.push(obj);
if (update) a.update.push(obj);
if (remove) a.remove.push(obj);
return a;
}, { view: [], update: [], remove: [] })
);
Или, если объекты username / userId должны быть отдельными ссылками, вы можете использовать распространение:
const acl=[{view:!0,update:!0,remove:!0,userId:1,username:"Mike"},{view:!0,update:!0,remove:!1,userId:2,username:"Joe"},{view:!0,update:!1,remove:!1,userId:3,username:"Lim"}];
console.log(
acl.reduce((a, { view, update, remove, userId, username }) => {
const obj = { username, userId };
if (view) a.view.push({...obj});
if (update) a.update.push({...obj});
if (remove) a.remove.push({...obj});
return a;
}, { view: [], update: [], remove: [] })
);