突然在一個項目中需要從後臺抓取大批量數據在前臺進行分組處理,但是在javascript中本身不具備對數組進行groupBy的方法。
因此,基於javascript的原型對於數組Array添加一個擴展方法groupBy
Array.prototype.groupBy = function (keyName) {
var result = {};
this.forEach(function (item) {
if (!result[item[keyName]])
result[item[keyName]] = new Array();
result[item[keyName]].push(item);
});
return result;
}
實際應用如下:
var array = new Array();
for (var i = 0; i < 1000; i++) {
array.push({ "Key": Math.ceil(Math.random()*10), "Value": Math.ceil(Math.random()*100) });
}
var groupList=array.groupBy("Key");
for (var key in groupList) {
$("<div>").append("<h1>" + key + ":" + groupList[key].length + "</h1>")
.append($.map(groupList[key], function (item) {
return item.Key+":"+item.Value;
}).join(","))
.appendTo($("body"))
}
頁面輸出如下(截圖只截取了一部分):