javascript - 如何按id数组分组

标签 javascript arrays reduce

大家好,可以帮我减少数组吗?我有两个数组,我需要在中间将其中一组分组。在这里您可以找到示例

我有对象数组

const arr = [{
    mid: 888,
    name: "test"
  },
  {
    mid: 888,
    name: "test1"
  },
  {
    mid: 888,
    name: "test2"
  },
  {
    mid: 777,
    name: "test10"
  },
]

但是我需要按中进行分组并得到类似的东西

const arr = [{
    mid: 888,
    projects: [{
        name: "test"
      },
      {
        name: "test1"
      },
      {
        name: "test2"
      },
    ]
  },
  {
    mid: 777,
    projects: [{
      name: "test10"
    }, ]
  }
]

最佳答案

const arr = [{
    mid: 888,
    name: "test"
  },
  {
    mid: 888,
    name: "test1"
  },
  {
    mid: 888,
    name: "test2"
  },
  {
    mid: 777,
    name: "test10"
  }
];

let newArray = []
arr.map(item => item.mid).filter((value, index, self)=> { 
    return self.indexOf(value) === index;
}).forEach((mid)=>{
    newArray.push({
        mid,
        projects: arr.filter(item => item.mid == mid).map(item =>{ return {name: item.name}; })
    })
})

console.log(newArray)

使用reduce的其他方式:

const arr = [{
    mid: 888,
    name: "test"
  },
  {
    mid: 888,
    name: "test1"
  },
  {
    mid: 888,
    name: "test2"
  },
  {
    mid: 777,
    name: "test10"
  }
];

newArray = arr.map(item => item.mid).filter((value, index, self)=> { 
    return self.indexOf(value) === index;
}).map(item=> { return {mid: item, projects: []}})

newArray = arr.reduce((res, current)=>{
    let index = newArray.map(item => item.mid).indexOf(current.mid);
    res[index].projects.push({name: current.name})
    
    return res;
}, newArray)

console.log(newArray)

关于javascript - 如何按id数组分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58606169/

相关文章:

php - 如何解决 PHP/HTML 中数组到字符串的转换问题?

javascript - 检查数组数组中是否存在变量

Clojure:使用输出作为下一个操作的输入执行操作 n 次(a-la reduce)

javascript - 从Reduce方法获取数组

javascript - div 的响应能力

JavaScript 淡入淡出

python - 如何在 Python 中获取多维 Numpy 数组元素的类型

list - 在 Elixir 中有效压缩不等长列表

javascript - 似乎无法让 "keyup"工作

javascript - React.useCallback() 用于链式匿名函数