массив массивов jquery

У меня такой массив

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

как я могу группировать и суммировать значения по A, B, C …

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

желаемый результат должен быть

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

Вот простой способ javascript для этого, который собирает уникальные индексы на карте и суммирует их, как он есть, а затем восстанавливает массив с итогами:

 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 

Рабочая демонстрация: http://jsfiddle.net/jfriend00/vPMwu/


Вот способ использования jQuery .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); 

Рабочая демонстрация: http://jsfiddle.net/jfriend00/Q8LLT/

Underscore.js имеет groupBy , а остальное можно сделать с помощью groupBy ping по reduce (т. groupBy каждой группы до одного элемента

 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/

Или (сокращенно)

 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/

  • Java-массив с элементами более 4 ГБ
  • Любой способ объявить массив в строке?
  • Ссылка на строку в ресурсе массива строк с помощью xml
  • В Perl, как я могу найти индекс заданного значения в массиве?
  • Поместить и получить массив String из общих настроек
  • Реверсивный массив C ++
  • Что полезно в отношении параметра reference-to-array?
  • Как выполнить множественное присвоение в MATLAB?
  • Теперь, когда у нас есть std :: array, какие применения остаются для массивов в стиле C?
  • Как преобразовать массив символов в строку?
  • Асинхронный доступ к массиву в Firebase
  • Interesting Posts

    Перерыв или возврат из streamа Java 8 для каждого?

    Как вы можете проверить, сколько питания USB-порт может доставить?

    Почему мой компьютер не загружается?

    Regex, чтобы получить слова после соответствующей строки

    Как получить ширину строки на Android?

    Как я могу безопасно просматривать ненадежный USB-накопитель?

    Низкое качество изображения / изображения при захвате с камеры

    публиковать проект с локальной базой данных

    Что такое сбалансированные группы балансировки?

    Почему Windows всегда использует столько виртуальной памяти, сколько установлена ​​RAM?

    Управление указателем мыши с клавиатурой

    Отключить перетаскивание COPY в Windows Explorer в Windows 7

    Почему неподписанное целочисленное переполнение определенного поведения, но недопустимое целочисленное число целых чисел?

    Получить веб-страницу, включая контент AJAX

    Каковы различия в просмотре 1080p и 720p версии одного и того же носителя на экране 720p?

    Давайте будем гением компьютера.