javascript - 按 Id 对数组中的对象进行分组 - JavaScript

标签 javascript arrays

我有一个对象数组,它有两个字段 id 和操作权限的类型

const array=[
{view: false, id: 1},
{create: false, id: 1},
{read: false, id: 1},
{update: false, id: 1},
{delete: false, id: 1},
{view: false, id: 2},
{create: false, id: 2},
{read: false, id: 2},
{update: false, id: 2},
{delete: false, id: 2},
]

我想将其转换为以下数组:

const permissions=[
{
id: 1,
view: false,
read: false,
create: false,
delete:false,
update:false
},
{
id: 2,
view: false,
read: false,
create: false,
delete:false,
update:false
}
]

最佳答案

您可以使用 Array#reduce 遍历数组在更新 Map 时其中 idkey,其结果对象是 value

最后,您会将每个 id 的分组对象作为此映射中的 values:

const array = [
  {view: false, id: 1},
  {create: false, id: 1},
  {read: false, id: 1},
  {update: false, id: 1},
  {delete: false, id: 1},
  {view: false, id: 2},
  {create: false, id: 2},
  {read: false, id: 2},
  {update: false, id: 2},
  {delete: false, id: 2},
];

const res = [...
  array.reduce((map, { id, ...elem }) =>
    map.set(id, { ...(map.get(id) || { id }), ...elem })
  , new Map)
  .values()
];

console.log(res);

关于javascript - 按 Id 对数组中的对象进行分组 - JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68455739/

相关文章:

javascript - 如何在 Javascript 中实现随机图像?

arrays - 在 CL 的 dotimes 循环中使用 aref?

C- 如果元素的索引大于动态分配的数组大小,它会返回 null 吗?

Java:将不同类型的数组相互排序

c++ - 增长序列的长度 C++

javascript - 通过 POST 请求将 jsondata 附加到在 Extjs 中加载 jsonstore 的调用

javascript - NodeJS - Events.js 无法读取未定义的每个属性

javascript - JavaScript 中的日期转换和日期比较

javascript - 删除 XML 中标签之间不需要的空格 (Javascript)

arrays - 如何将看起来像数组值的字符串转换为数组?