const data = {
"orders" : [
{ "items" : {"count":3} },
{ "items" : {"count":1} },
{ "items" : {"count":2} }
]
}
let total = 0
data.orders.map((order) => order.items.map((item) => (total += item.count)))
console.log(total)
Есть ли более умный способ сделать это, где я могу сказать console.log(someoperation(data))
?
У вас есть работы, но вы также можете использовать метод array .reduce
:
const data = {
"orders" : [
{ "items" : {"count":3} },
{ "items" : {"count":1} },
{ "items" : {"count":2} }
]
}
const total = data.orders.reduce((cnt, item) => { return cnt+item.items.count; }, 0)
console.log(total)
РЕДАКТИРОВАТЬ:
Кроме того, если у вас есть lodash, это еще проще:
const total = _.sumBy(data.orders, x => x.items.count); // evaluates to 6
Вы можете использовать вложенное назначение деструктурирования для значения для подсчета.
var data = { orders: [{ items: { count: 3 } }, { items: { count: 1 } }, { items: { count: 2 } }] },
total = data.orders.reduce((s, { items: { count } }) => s + count, 0);
console.log(total);
Функция для одного вызова с объектом
const getCount = ({ orders }) => orders.reduce((s, { items: { count } }) => s + count, 0);
var data = { orders: [{ items: { count: 3 } }, { items: { count: 1 } }, { items: { count: 2 } }] };
console.log(getCount(data));
Просто оберните его функцией с параметрами:
function getTotal(startVal) {
var total = startVal;
data.orders.map((order) => order.items.map((item) => (total += item.count)))
const data = {
"orders" : [
{ "items" : {"count":3} },
{ "items" : {"count":1} },
{ "items" : {"count":2} }
]
}
return total;
}
console.log(getTotals(0));
Array#reduce
order.items
не является массивом, вы не можете.map()
это.