首页 > 解决方案 > 如何获得 Reactjs 中嵌套数组的总和?

问题描述

我想获得特定类别中嵌套数组的总价,例如:Hot Drinks

这是我现在拥有的示例,因此我想过滤掉并仅获取热饮类别的总价格。

[
  {
    totalPrice: 30,
    _id: '6014fa4324e125599eaa72b5',
    orderItems: [
      {
        _id: '6014fa4324e125599eaa747ss',
        category: 'Breakfast',
        name: 'food name 1',
        price: 3,
        qty: 1,
      },
      {
        _id: '6014fa4324e125599eaa747s5',
        category: 'Hot Drinks',
        name: 'drink name 1',
        price: 3,
        qty: 5,
      },
      {
        _id: '6014fa4324e125599eaa74767',
        category: 'Hot Drinks',
        name: 'drink name 2',
        price: 4,
        qty: 2,
      },
    ],
  },
  {
    totalPrice: 23,
    _id: '6014fa4324e125599eaa7276e',
    orderItems: [
      {
        _id: '6014fa4324e125599eaa747ss',
        category: 'Hot Drinks',
        name: 'drink name 1',
        price: 3,
        qty: 6,
      },
    ],
  },
]

标签: javascriptarraysreactjs

解决方案


const filterBy = 'Hot Drinks';

const items = [
  {
    totalPrice: 30,
    _id: '6014fa4324e125599eaa72b5',
    orderItems: [
      {
        _id: '6014fa4324e125599eaa747ss',
        category: 'Breakfast',
        name: 'food name 1',
        price: 3,
        qty: 1,
      },
      {
        _id: '6014fa4324e125599eaa747s5',
        category: 'Hot Drinks',
        name: 'drink name 1',
        price: 3,
        qty: 5,
      },
      {
        _id: '6014fa4324e125599eaa74767',
        category: 'Hot Drinks',
        name: 'drink name 2',
        price: 4,
        qty: 2,
      },
    ],
  },
  {
    totalPrice: 23,
    _id: '6014fa4324e125599eaa7276e',
    orderItems: [
      {
        _id: '6014fa4324e125599eaa747ss',
        category: 'Hot Drinks',
        name: 'drink name 1',
        price: 3,
        qty: 6,
      },
    ],
  },
]
const sumOf = (items, filterBy) => {
  let totalPrice = 0;
  items.forEach(item => {
    item.orderItems.forEach(orderItem => {
      if (orderItem.category === filterBy) {
        totalPrice += orderItem.price;
      }
    })
  })
  return totalPrice;
}

console.log(sumOf(items, filterBy))

推荐阅读