Blog coding and discussion of coding about JavaScript, PHP, CGI, general web building etc.

Thursday, August 18, 2016

Group by java-script Array object

Group by java-script Array object


I have below array object in JavaScript

  [ ["English", 52], ["Hindi", 154], ["Hindi", 241], ["Spanish", 10], ["French", 65], ["German", 98], ["Russian", 10] ]  

What will be the best way to group by array item based on language and their average values in java-script.

I am using below code to do grouping.

function (Scores) {              var map = {};              for (var i = 0; i < Scores.length; i++) {                  var score = map[Scores[i][0]];                    if (score) {                        score = { 'Sum': score.Sum + Scores[i][1], 'Count': score.Match + 1, 'Language': Scores[i][0] };                      score.Avg = Math.round(score.Sum / score.Count);                      map[Scores[i][0]] = score;                    } else {                      map[Scores[i][0]] = { 'Sum': Scores[i][1], 'Count': 1, 'Language': Scores[i][0], 'Avg': Scores[i][1] };                  }                }                return map;          }  

Answer by gu mingfeng for Group by java-script Array object


var data = [["English", 52], ["Hindi", 154], ["Hindi", 241], ["Spanish", 10],          ["French", 65], ["German", 98], ["Russian", 10]];    var aggregate = data.reduce(function(prev,curr){      var key = curr[0];      if(!prev[key]){          prev[key]={lang:key,count:0,total:0};      }      var dt = prev[key];      dt.count++;      dt.total+=curr[1];      dt.avg=dt.total/dt.count;        return prev;  },{});    console.log(aggregate);

Answer by Dhaval for Group by java-script Array object


The generalize method:

var groupList =   [ ["English", 52], ["Hindi", 154], ["Hindi", 241], ["Spanish", 10], ["French", 65], ["German", 98], ["Russian", 10] ]  function groupByProperty (groupList, groupIndex) {      var groupBy = {};      groupList.forEach(function(group){          if(groupBy[group[groupIndex]]){              groupBy[group[groupIndex]].push(group);          }          else {              groupBy[group[groupIndex]] = [];              groupBy[group[groupIndex]].push(group)          }      })      for(key in groupBy){          if (groupBy.hasOwnProperty(key)) {              console.log(key + ',' + JSON.stringify(groupBy[key]))          }      }  }  groupByProperty(groupList,0)//For state  groupByProperty(groupList,1)//For average  

Answer by Nina Scholz for Group by java-script Array object


A proposal with the same style as the input array.

var data = [["English", 52], ["Hindi", 154], ["Hindi", 241], ["Spanish", 10], ["French", 65], ["German", 98], ["Russian", 10]],      result = [];    data.forEach(function (a) {      if (!this[a[0]]) {          this[a[0]] = { data: [], result: [a[0], 0] };          result.push(this[a[0]].result);      }      this[a[0]].data.push(a[1]);      this[a[0]].result[1] = this[a[0]].data.reduce(function (a, b) { return a + b; }) / this[a[0]].data.length;  }, Object.create(null));    console.log(result);

Answer by Mohammed Shafeek for Group by java-script Array object


Try this code..

var items = [ ["English", 52], ["Hindi", 154], ["Hindi", 241], ["Spanish", 10], ["French", 65], ["German", 98], ["Russian", 10] ];  for(var i=0;i

Answer by Redu for Group by java-script Array object


Well OK.. for a change lets do this O(n) with a single reduce.

var data = [ ["English", 52], ["Hindi", 154], ["Hindi", 241], ["Spanish", 10], ["French", 65], ["German", 98], ["Russian", 10] ],      avrg = (a) => a.reduce((p,c) => p+c)/a.length,   reduced = data.reduce((p,c,i,a) => ((a[c[0]]) ? (a[c[0]].v.push(c[1]),                                                    p[a[c[0]].j][1] = avrg(a[c[0]].v))                                                 : (a[c[0]] = {"v":[c[1]], "j":p.length},                                                    p.push([c[0],c[1]])),                                       p),[]);  console.log(reduced);


Fatal error: Call to a member function getElementsByTagName() on a non-object in D:\XAMPP INSTALLASTION\xampp\htdocs\endunpratama9i\www-stackoverflow-info-proses.php on line 72

0 comments:

Post a Comment

Popular Posts

Powered by Blogger.