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 },
個人筆記,不當之處歡迎指正,轉載請注明出處