【问题标题】:Getting multiple percentage from a reduce map of a json data从json数据的reduce map中获取多个百分比
【发布时间】:2022-01-06 06:40:35
【问题描述】:

如果已经有这样的问题,我想提前道歉,但我已经搜索了一整天,我真的可以找到任何东西。

我调用了一个返回响应的 api。然后我只得到我需要的详细信息/数据,目前有一个带有这个示例值的 json 文件:

{
    "total": 563,
    "shipping_fee": 58,
    "e_charges": ???,
    "order_items": [
      {
        "item_id": 6291020872,
        "quantity": 1,
        "price": 88,
        "total": 88
      },
      {
        "item_id": 7755274567,
        "quantity": 1,
        "price": 150,
        "total": 150
      },
      {
        "item_id": 7980571205,
        "quantity": 1,
        "price": 45,
        "total": 45
      },
      {
        "item_id": 12612977930,
        "quantity": 1,
        "price": 280,
        "total": 280
      }
    ]
  }, ... {} {} {}....

我的问题是,我需要在order_items [] 中获得所有total 的总和,然后,我需要添加shipping_fee 并获得两组百分比

  1. 10%
  2. 8%

请注意,我在运行时获取值。

const resDetails = await request.post(baseURL, {
        data: viewData
    });

info = await JSON.parse(JSON.stringify(await resDetails.json()));

这是 json 文件的来源:

orders = await info.data.orders.map((x) => (total: x.order_items.map(y =>  Number(y.order_price) * y.amount).reduce((total, y) => y+total),
        shipping_fee : Number(x.shipping_fee), 
        e_charges: Number(Number((x.order_items.map(y=>  Number(y.order_price) * y.amount).reduce((total, y) => Number(y+total)) + Number(x.shipping_fee)) * 0.1).toFixed()),
        order_items: x.order_items.map((y) => ({
             item_id : y.item_id, 
             quantity: y.amount, 
             price: Number(y.order_price),
             total: Number(y.order_price) * y.amount)}))

我能够得到 10%,但我的主要问题是在不做映射的情况下添加另外 8%,减少并再次添加 shipping_fee

Number(Number((x.order_items.map(y=>  Number(y.order_price) * y.amount).reduce((total, y) => Number(y+total)) + Number(x.shipping_fee)) * 0.1).toFixed())

我对 javascript/typescript 世界还很陌生。我希望有人可以帮助我找到一种更优化的方式来实现我所需要的。谢谢。

编辑: 这是实际的代码:

【问题讨论】:

  • 我相信以上是供您处理的输入。我看到shipping_feee_charges(带有??)已经添加。你能把结构分开吗:你得到什么作为输入和你想要什么作为输出?
  • @RiteshJagga 我正在调用一个返回 json 的 api。我需要获取这些详细信息并将其放在仅包含我需要的数据的 json 文件中。上面的 json 文件已经是从响应中实际提取的。

标签: javascript json typescript javascript-objects


【解决方案1】:

您可以通过下面的代码。我不喜欢在单行中进行mapreduce 和计算,因为它会降低可读性。因此,我将计算分解为多种方法。

最后,订单total只计算一次,并将e_charges的百分比保存在e_charges_8e_charges_10两个不同的键中,相信你可以根据需要进行修改。

let orders = [
  {
    "shipping_fee": 58,
    "order_items": [
      {
        "item_id": 6291020872,
        "quantity": 1,
        "price": 88
      },
      {
        "item_id": 7755274567,
        "quantity": 1,
        "price": 150
      },
      {
        "item_id": 7980571205,
        "quantity": 1,
        "price": 45
      },
      {
        "item_id": 12612977930,
        "quantity": 1,
        "price": 280
      }
    ]
  }, 
  {
    "shipping_fee": 58,
    "order_items": [
      {
        "item_id": 6291020872,
        "quantity": 1,
        "price": 88
      },
      {
        "item_id": 7755274567,
        "quantity": 1,
        "price": 150
      },
      {
        "item_id": 7980571205,
        "quantity": 1,
        "price": 45
      },
      {
        "item_id": 12612977930,
        "quantity": 1,
        "price": 280
      }
    ]
  }
]


const getOrderItemTotal = (orderItem) => {
  return orderItem.quantity * orderItem.price
}

const getPercentage = (shippingFee, total, percentage) => {
  return ((total + shippingFee) * percentage).toFixed()
}

const getOrderItemsTotal = (orderItems) => {
  return orderItems.reduce((total, orderItem) => (total + orderItem.total), 0)
}

orders = orders.map(order => {
  order.order_items.map(orderItem => {
    orderItem.total = getOrderItemTotal(orderItem)
    return orderItem
  })
  
  order.total = getOrderItemsTotal(order.order_items)
  
  order.e_charges_8 = getPercentage(order.shipping_fee, order.total, 0.1)
  order.e_charges_10 = getPercentage(order.shipping_fee, order.total, 0.08)
    
  return order
})


console.log(orders)

【讨论】:

  • 抱歉没有说清楚。我更新了帖子。
猜你喜欢
  • 2011-08-21
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
  • 1970-01-01
  • 2021-06-12
相关资源
最近更新 更多