Как посчитать сумму обьекта js?

Есть обьект у которого необходимо подсчитать сумму всех его элементов:

const result = {
  "72": { id: "72", "price": "13000", "count": 2 },
  "71": { id: "71", "price": "12000", "count": 3 },
  "70": { id: "70", "price": "11000", "count": 4 }
};

Пробовал сделать так:

for (let key in result) {
  let sum = 0;
  sum += Number(Object.values(result[key]*[1]*Object.values(result[key])[2]);
  console.log(sum);
}

Но получаю только сумму первого и второго элемента. А как мне быть, чтобы получить сумму всех элементов обьекта?


Ответы (2 шт):

Автор решения: Kirill Novikov

Например вот так через reduce:

Object.values(result).reduce((acc, item) => acc + (item.price * item.count), 0)
→ Ссылка
Автор решения: ΝNL993

Давай вместо всяких reduce, который вы ещё не знаете, разберём ваш код.

Для начала, sum надо объявлять за циклом, т.к. если сумма (sum) объявлена в цикле, при каждой итерации сумма у вас снова обнуляться до той которую вы написали в ней, плюс к тому вы не сможете к ней обратится за циклом если она объявлена прямо в нём (цикле).

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

const result = {
  "72": {id: '72', "price": "13000", "count": 2},
  "71": {id: '71', "price": '12000', "count": 3}
}

let sum = 0;

for (let key in result) {
  let value = result[key]
  let values = Object.values(value)

  sum += Number(values[1] * values[2])
}

console.log(sum);

А на самом деле лучше будет просто обращаться к самому объекту вместо того чтобы, сначала превращать его в массив, а уже потом обращаться к его значениям. Плюс к тому вам не нужно будет считать на каком месте находится то или иная пропорция, можно будет сразу обратиться к нему. (Подробнее изучите тему объектов, вам они очень пригодятся, если вы их не выучите сейчас, но не поймёте потом)

const result = {
  "72": {id: '72', "price": "13000", "count": 2},
  "71": {id: '71', "price": '12000', "count": 3}
}

let sum = 0;

for (let key in result) {
  let value = result[key]

  sum += Number(value.price * value.count)
}

console.log(sum);

→ Ссылка