Create totals array from two-dimensional array in Javascript -
say have two-dimensional array:
// [name, item, price]  var arr = [     ['bob', 'book', '3'],     ['mary', 'pencil', '2'],     ['steve', 'book', '2'],     ['steve', 'pencil', '1'],     ['bob', 'book', '2'] ];   i need create second array contains:
- each name once
 - a total each name
 - an array of objects, each object representing item , corresponding price.
 
for instance:
// [name, total_price, [ { item: item, price: price } ] ]   totals = [     ['bob', 5, [ { item: 'book', price: 3 }, { item: 'book', price: 2 } ] ],     ['mary', 2, [ { item: 'pencil', price: 2 } ] ],     ['steve', 3, [ { item: 'book', price: 2 }, { item: 'pencil', price: 1 } ] ]  ];   what best way create totals array?
also, array of objects items , prices two-dimensional array if that's more efficient, this:
// [name, total_price, [ [item, price], [item, price], [item, price] ] ]      
you can use array.prototype.reduce. example of temporary map variable store array indexes:
var arr = [      ['bob', 'book', '3'],      ['mary', 'pencil', '2'],      ['steve', 'book', '2'],      ['steve', 'pencil', '1'],      ['bob', 'book', '2']  ];    var names = {};  var result = arr.reduce(function(prev, curr) {       if (names[curr[0]] === undefined) {          prev.push([curr[0], 0, []]);          names[curr[0]] = prev.length - 1;      }      var = names[curr[0]];      prev[i][1] += number(curr[2]);      prev[i][2].push({item: curr[1], price: curr[2]});      return prev;  }, []);    document.write('<pre>' + json.stringify(result, null, 4));  
Comments
Post a Comment