Суммируйте все объекты по имени ключа [дубликата]

1

Я хотел бы суммировать все объекты по их имени, используя цикл. Ключ "id" будет удалять

var arr = [{id:1, "my color":1,"my fruit":4},{id:2,"my color":2,"my fruit":4},etc];

var merged = arr.reduce(function(previousValue, currentValue) {
     return {
            "my fruit": previousValue["my fruit"] + currentValue["my fruit"],
            "my color": previousValue["my color"] + currentValue["my color"],
             etc:...
          }
        });

Я бы хотел этот результат

result = [{"my color":3},{"my fruit":8},etc];
  • 0
    Итак, что же не так с предоставленным кодом? В чем вопрос?
  • 0
    Вы можете вызвать функцию из поста, который я связал с sumObjectsByKey(...arr)
Показать ещё 2 комментария
Теги:
object
arrays
loops

1 ответ

0
Лучший ответ

Вместо жесткого кодирования ключей было бы более гибким, если бы вы повторили все ключи в объекте внутри функции уменьшения и добавили их в результат, таким образом, входные объекты могут иметь произвольные пары ключ/число:

const arr = [{id:1, "my color":1,"my fruit":4},{id:2,"my color":2,"my fruit":4}];
const res = arr.reduce((a, { id, ...rest }) => {
  Object.entries(rest).forEach(([key, val]) => {
    a[key] = (a[key] || 0) + val;
  });
  return a;
}, {});
console.log(res);
  • 0
    И как я могу получить их процент (значение / сумма значений), а не их сумму? как это {"мой цвет": 27, "мой фрукт": 73}
  • 0
    Суммируйте values результата, затем разделите каждое значение на сумму

Ещё вопросы

Сообщество Overcoder
Наверх
Меню