Как посчитать сумму обьекта 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 шт):
Например вот так через reduce:
Object.values(result).reduce((acc, item) => acc + (item.price * item.count), 0)
Давай вместо всяких 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);