фильтруя 2D массив в javascript, я попробовал все - PullRequest
0 голосов
/ 21 июня 2019

У меня есть 2D-массив, подобный этому:

[[ONE,1],[QUARTER,0.25],[QUARTER,0.25]]

Я хочу, чтобы оно стало:

[[ONE,1],[QUARTER,0.5]]

Я пытался использовать array.IndexOf, но не повезло

ONE,1,QUARTER,0.25,QUARTER,0.25

Ответы [ 2 ]

1 голос
/ 21 июня 2019

В отличие от заголовка вашего вопроса, ваш пример предполагает, что вы хотите sum , а не filter, массив.

let arr = [['ONE', 1], ['QUARTER', 0.25], ['QUARTER', 0.25]];

let sums = arr.reduce((sums, item) => {
  let found = sums.find(([key]) => key === item[0]);
  if (found)
    found[1] += item[1];
  else
    sums.push(item);
  return sums;
}, []);

console.log(sums);
0 голосов
/ 21 июня 2019

Вы можете уменьшить массив, посмотрев, существует ли тот же ключ.

var array = [['ONE', 1], ['QUARTER', 0.25], ['QUARTER', 0.25]],
    result = array.reduce((r, [key, value]) => {
        var temp = r.find(a => a[0] === key);
        if (temp) {
            temp[1] += value;
        } else {
            r.push([key, value]);
        }
        return r;
    }, []);

console.log(result);
...