умный способ добавить вложенные свойства?

1
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))?

  • 0
    Вы можете использовать Array#reduce
  • 1
    order.items не является массивом, вы не можете .map() это.
Теги:
ecmascript-6

3 ответа

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

У вас есть работы, но вы также можете использовать метод 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
2

Вы можете использовать вложенное назначение деструктурирования для значения для подсчета.

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));
0

Просто оберните его функцией с параметрами:

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));
  • 3
    Функция должна принимать аргумент, а не жестко кодировать имя глобальной переменной.

Ещё вопросы

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