上周在做项目的时候,遇到一个包含了若干对象的数组,项目需要将这些对象根据某个属性分为若干个数组。我的思路原来是这样的:
把需要分组的属性取出来放入一个新建的数组,然后根据这个数组循环去找大型数组中的属性,如果数组中的属性在这个新数组中已经存在,说明已经有了这个分组了,将这个对象放入相应的分组即可,如果新数组中不存在这个对象的属性值,说明是一个新的对象,那么将他的属性值放入新建的数组中,然后再为它建立一个新的分组,将这个对象存入分组;
可能是技术水平太低了,在代码编写的过程中遇到了些问题:
在新的数组中不存在这个对象的属性值时需要建立一个新的数组,然后,我在定义新的数组时遇到了困难,我不知道该怎么命名新的数组了,如果我是用同一个名字,那么后面建立的数组就会把前面建立的数组给覆盖掉,后来在同事的帮助下,才算完成了这个分组任务;
解决的方法是:使用用来存放属性值的数组的长度来区别命名新生成的分组。完整代码如下:
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); //输出分组之后的对象