jquery array group by

匿名 (未验证) 提交于 2019-12-03 02:11:02

问题:

I have array like this

abcArr = [["A", 10], ["B", 20], ["A",30],["C",40]] 

how can I group and sum values by A, B, C...

$.each(abcArr , function() {     if (this[0] == this[0]) {        this[1] + this[1]      }; // I know this will simple double [1] values :( }); 

desired result should be

[["A", 40], ["B", 20], ["C",30]] 

回答1:

Here's a plain javascript way to do it that collects the unique indexes in a map and totals them as it does, then regenerates the array with the totals:

abcArr = [["A", 10], ["B", 20], ["A",30],["C",40]];  var items = {}, base, key; for (var i = 0; i < abcArr.length; i++) {     base = abcArr[i];     key = base[0];     // if not already present in the map, add a zeroed item in the map     if (!items[key]) {         items[key] = 0;     }     // add new item to the map entry     items[key] += base[1]; }  // Now, generate new array var outputArr = [], temp; for (key in items) {     // create array entry for the map value     temp = [key, items[key]]     // put array entry into the output array     outputArr.push(temp); }  // outputArr contains the result 

Working demo: http://jsfiddle.net/jfriend00/vPMwu/


Here's a way using jQuery's .each:

abcArr = [["A", 10], ["B", 20], ["A",30],["C",40]];  var items = {}, base, key; $.each(abcArr, function(index, val) {     key = val[0];     if (!items[key]) {         items[key] = 0;     }     items[key] += val[1]; });  var outputArr = []; $.each(items, function(key, val) {     outputArr.push([key, val]); });  // outputArr contains the result document.body.innerHTML = JSON.stringify(outputArr); 

Working demo: http://jsfiddle.net/jfriend00/Q8LLT/



回答2:

Underscore.js has groupBy, and the rest can be done by mapping over reduce (that is, reducing each group to one element

abcArr = [["A", 10], ["B", 20], ["A",30],["C",40]]  var grouped = _.groupBy(abcArr, function(x){return x[0]}) var result  = _.map(grouped, function(x){     return _.reduce(x, function(x,y){         return [y[0], x[1]+y[1]];     }, [,0]) }) 

http://jsfiddle.net/srvKQ/

Or (minified)

abcArr = [["A", 10], ["B", 20], ["A",30],["C",40]]  var result = _.map(     _.groupBy(abcArr, function(x){return x[0]}),     function(x){return _.reduce(         x, function(x,y){return [y[0], x[1]+y[1]]}, [,0] )}); 

http://jsfiddle.net/srvKQ/1/



文章来源: jquery array group by
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!