Creating an associative array in Javascript using a map function

I have an array of objects with the following format

[{'list': 'one', 'item': 1}, {'list': 'one', 'item': 2}, {'list': 'one', 'item': 3}, {'list': 'two', 'item': 1}, {'list': 'two', 'item': 2}] 

And I want to convert it like this

 [{'one': [1, 2, 3]}, {'two': [1, 2]}] 

How can I do this using the Array.map function? Is this the best alternative?

+6
source share
3 answers

To your specific question:

 // Let x hold your array of objects. res={}; // Create an empty object that will hold the answer x.forEach (function (e) { // Use this function to iterate over each item in the list res[e.list] = res[e.list] || []; // inspired by the Nina Scholz answer below res[e.list].push(e.item); // Append the result to the array }); 
+1
source

You can use Array.prototype.reduce for your task. It allows you to get the return value in the callback function for the next call.

 var data = [ { 'list': 'one', 'item': 1 }, { 'list': 'one', 'item': 2 }, { 'list': 'one', 'item': 3 }, { 'list': 'two', 'item': 1 }, { 'list': 'two', 'item': 2 } ], flat = data.reduce(function (r, a) { r[a.list] = r[a.list] || []; r[a.list].push(a.item); return r; }, {}); document.write('<pre>' + JSON.stringify(flat, 0, 4) + '</pre>'); 
+8
source

What you are looking for is a group method. This question has a nice answer: https://codereview.stackexchange.com/questions/37028/grouping-elements-in-array-by-multiple-properties

Code:

 function groupBy( array , f ) { var groups = {}; array.forEach( function( o ) { var group = JSON.stringify( f(o) ); groups[group] = groups[group] || []; groups[group].push( o ); }); return Object.keys(groups).map( function( group ) { return groups[group]; }) } var result = groupBy(list, function(item) { return [item.lastname, item.age]; }); 
+1
source

All Articles