怎么根据一个数组里面对象的值把这个数组分成多个数组

我拿到的数据是一个由多个对象组成的数组;
我想根据其中一个对象的值把这个数组分成多个数组;
比如说根据其中的productId的值,分别把值为1,2,3...的对象单独放进一个数组;
我的思路是先遍历用if判断匹配的值和索引值将这个数组存到新数组里;
但是不知道具体怎么实现,或者有没有其他更简洁的方法。

数据如下图:
clipboard.png

阅读 5.5k
4 个回答
let result=array.reduce(function(initArray,item){
    let index=item.productid;
    if(initArray[index]){
        initArray[index].push(item)
    }else{
        initArray[index]=[item]
     }
    return  initArray;
},[])
console.log(result)
方法多种多样

如果只想得到一个数组的话用 filter,如果想得到多个数组得用 reduce

var a = [{id: 1}, {id: 3}, {id: 2}, {id: 3}, {id: 1}];
var b = a.reduce((r, x) => ((r[x.id] || (r[x.id] = [])).push(x), r), {});
var c = Object.keys(b).map(x => b[x]);

console.log(c); // [[{id: 1}, {id: 1}], [{id: 2}], [{id: 3}, {id: 3}]]
const groupBy = (arr, fn) =>
  arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce((acc, val, i) => {
    acc[val] = (acc[val] || []).concat(arr[i]);
    return acc;
  }, {});

Object.values(groupBy(arr, 'projectId'))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题