Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

243
Views
Getting multiple percentage from a reduce map of a json data

I would like to apologize in advance if there's already question like this but I've been searching all day and I really can find anything.

I call an api that returns a response. Then I only get the details/data that I need and currently now have a json file with this sample value:

{
    "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
      }
    ]
  }, ... {} {} {}....

My problem is that, I need to get the sum of all total in order_items [] then after that, I need to add the shipping_fee and get 2 sets of percentage

  1. 10%
  2. 8%

Note that, I'm getting the values in run-time.

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

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

This is where the json file came from:

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)}))

I was able to get the 10% but my main problem is adding the other 8% without doing mapping, reducing and adding the shipping_fee again.

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())

I'm fairly new to the javascript/typescript world. I hope someone can help me find a more optimized way to achieve what I need. Thank you.

EDIT: Here's the actual code: enter image description here

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

You may please go through the below code. I'm not a big fan of doing map, reduce and calculations in single line because it takes away the readability. So, I broken down the calculations to a number of methods.

At the end, order total is calculated only once and saved the e_charges percentages in 2 different keys e_charges_8 and e_charges_10, which I believe you can modify as per your need.

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)

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!