/**
* 数组按指定字段排序
* @param itemlist
* @param gby
* @param keyName
* @param valueName
* @returns {Array}
* @constructor
*/
function ArrayGroupBy (itemlist, gby, keyName = 'key', valueName = 'value') {
var setGroupObj = function (noteObj, rule, gby, gIndex, maxIndex) {
var gname = rule[gby[gIndex]];
if (gIndex == maxIndex) {
if (noteObj[gname] == undefined)
noteObj[gname] = [];
if (noteObj[gname].indexOf(rule) < 0) {
noteObj[gname].push(rule);
}
}
else {
if (noteObj[gname] == undefined) {
noteObj[gname] = {};
}
setGroupObj(noteObj[gname], rule, gby, gIndex + 1, maxIndex);
}
}
var noteObj = {};
for (var i = 0; i < itemlist.length; i++) {
setGroupObj(noteObj, itemlist[i], gby, 0, gby.length - 1);
}
var getSubInfo = function (note, p, gIndex, maxIndex) {
var newobj = {}
newobj[keyName] = p;
newobj[valueName] = [];
if (gIndex == maxIndex) {
for (var k in note[p]) {
newobj[valueName].push(note[p][k]);
}
}
else {
for (var k in note[p]) {
newobj[valueName].push(getSubInfo(note[p][k], k, gIndex + 1, maxIndex));
}
}
return newobj;
}
var myobj = [];
for (var p in noteObj) {
myobj.push(getSubInfo(noteObj, p, 0, gby.length - 1));
}
return myobj;
}
网友评论