将一个存放了若干个对象的数组按照对象的某个属性值进行分组

上周在做项目的时候,遇到一个包含了若干对象的数组,项目需要将这些对象根据某个属性分为若干个数组。我的思路原来是这样的:

把需要分组的属性取出来放入一个新建的数组,然后根据这个数组循环去找大型数组中的属性,如果数组中的属性在这个新数组中已经存在,说明已经有了这个分组了,将这个对象放入相应的分组即可,如果新数组中不存在这个对象的属性值,说明是一个新的对象,那么将他的属性值放入新建的数组中,然后再为它建立一个新的分组,将这个对象存入分组;

可能是技术水平太低了,在代码编写的过程中遇到了些问题:

在新的数组中不存在这个对象的属性值时需要建立一个新的数组,然后,我在定义新的数组时遇到了困难,我不知道该怎么命名新的数组了,如果我是用同一个名字,那么后面建立的数组就会把前面建立的数组给覆盖掉,后来在同事的帮助下,才算完成了这个分组任务;

解决的方法是:使用用来存放属性值的数组的长度来区别命名新生成的分组。完整代码如下:

var proList = [];  //创建一个新数组,用来存放找到的属性值
var restObj = {};  //创建一个对象,用来存放分组的对象
for(var i = 0; i < arrList.length;i++){
  if(proList.indexOf(arrList[i].objName == -1){
    //在proList中不存在该对象那个的属性值,那么将该属性值存入proList,同时创建一个新的分组
    proList.push(arrList[i].objName);
    var restObj["arr"+proList.length] = [];
    restObj["arr"+proList.length].push(arrList[i]);
  }else{
    //在proList中存在该对象的属性值,说明该对象的属性值已经建立过分组,将该对象放入对应的分组即可
    restObj["arr"+(proList.indexOf(arrList[i].objName)+1)].push(arrList[i]);
  };
};
console.log(restObj); //输出分组之后的对象

猜你喜欢

转载自my.oschina.net/u/3704598/blog/1575511