javascript подсчет дубликатов в массиве без дублированного имени - PullRequest
1 голос
/ 01 февраля 2020
var data = [
  { row: 'aa', col: 1, value: 1 },
  { row: 'bb', col: 2, value: 1 },
  { row: 'bb', col: 3, value: 1 },
  { row: 'aa', col: 1, value: 1 },
  { row: 'aa', col: 2, value: 1 }
]

var o = {}
var result = data.reduce(function(r, e) {
  var key = e.row + '|' + e.col;
  if (!o[key]) {
    o[key] = e;
    r.push(o[key]);
  } else {
    o[key].value += e.value;
  }
  return r;
}, []);

console.log(result)

РЕЗУЛЬТАТ Я ПОЛУЧАЮ:

0: {row: "aa", col: 1, value: 2}
1: {row: "bb", col: 2, value: 1}
2: {row: "bb", col: 3, value: 1}
3: {row: "aa", col: 2, value: 1}

РЕЗУЛЬТАТ Я ХОЧУ: Как объединить объединение строк и суммировать значение col и значение, чтобы вывод был следующим:

RESULT:
0: {row: "aa", col: 3, value: 3}
1: {row: "bb", col: 5, value: 2}

здесь jsFiddle: https://jsfiddle.net/kpj29uv6/

1 Ответ

1 голос
/ 01 февраля 2020

решено!

var data = [
  { row: 'aa', col: 1, value: 1 },
  { row: 'bb', col: 2, value: 1 },
  { row: 'bb', col: 3, value: 1 },
  { row: 'aa', col: 1, value: 1 },
  { row: 'aa', col: 2, value: 1 }
]

var o = {}
var result = data.reduce(function(r, e) {
    r[e.row] = r[e.row] || { row: e.row, col: 0, value: 0 };

  r[e.row].col += e.col;
  r[e.row].value += e.value;

  return r;
}, {});

console.log(Object.values(result));
...