var datalist = [{ "name": '张三', "type": 1 }, { "name": '张五', "type": 1 }, { "name": '张六', "type": 2 }, { "name": '张七', "type": 5 }, { "name": '张八', "type": 0 }] var resList =this.groupByList(datalist); //如果中间有相差的,则强制建数据 console.log(resList); console.log(resList[0]); console.log(resList[3]);
调用的函数
//根据某个数字类型的字段对数组分组 groupByList(datalist){ let resList = [];//分组结果 for (var i = 0; i < datalist.length; i++) { var thisindex = parseInt(datalist[i].type);//分组的索引 if (resList[thisindex] != undefined) {//如果数组中有值,则添加第二条数据 resList[thisindex] = resList[thisindex].concat(datalist[i]); } else {//新建数组 resList[thisindex] = []; resList[thisindex][0] = datalist[i]; } } return resList },
这个方法只能对数组类型的字段进行分组,对于文字暂时没考虑,可以根据需要自行调整
思路是:先循环数组,然后第一次添加的数组加入值,然后第二次再次分入这个组里,进行插入的,最后取值
这个操作类似于分页,只不过分页是直接相加,这个把数据过滤了然后再填入
其他:
如果对英文首字母排序
var datalist = [{ "name": '张三', "ename": "A" }, { "name": '张五', "ename": "A" }, { "name": '张六', "ename": "B" }, { "name": '张七', "ename": "B" }, { "name": '张八', "ename": "Q" }] var resList = this.groupByList(datalist); //如果中间有相差的,则强制建数据 console.log(resList); //根据某个数字类型的字段对数组分组 groupByList(datalist) { let resList = []; //分组结果 let resIndex = -1; let lasetName = ""; for (var i = 0; i < datalist.length; i++) { var ename = datalist[i].ename; //分组的索引 console.log(ename,lasetName) if (lasetName == ename) { //如果数组中有值,则添加第二条数据 resList[resIndex] = resList[resIndex].concat(datalist[i]); } else { //新建数组 resIndex++; lasetName = ename; resList[resIndex] = []; resList[resIndex][0] = datalist[i]; } } return resList },
个人笔记,不当之处欢迎指正,转载请注明出处