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

167
Views
Get Total From a Chosen Array in ES6

I wanted to get the total productPrice from the chosenData array. I need to compare it from the mainData and only get its total value. My problem is that I'm getting undefined and how should I do it and is there a shorter way of doing it?

  const mainData = [
    {
        "id": "4324",
        "productName": "Apple",
        "productPrice": 250,
    },
    {
        "id": "656546b",
        "productName": "Banana",
        "productPrice": 500,
    },
    {
        "id": "5656",
        "productName": "Soup",
        "productPrice": 800,
    }
];

const chosenData = ['5656', '656546b']
  
  const newArray = chosenData.map((value, index) => ({
    productPrice: mainData.find((data) => data.id === value)
  }))


console.log(newArray.productPrice)

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

0

In your solution, newArray obtained through map is an array, and array does not have the attribute productPrice, therefore you got undefined.

You can filter out the object with matching id, then sum them up, ex:

mainData.filter(value=>chosenData.includes(value.id)).reduce((acc, cur)=>acc+cur.productPrice, 0)
about 4 years ago · Juan Pablo Isaza Report

0

map returns a new array and it does not skip any element. You can use reduce and inside the reduce callback, use find. If an element with same id is found in the maindData it will return the object otherwise undefined. If it is not undefined , then get the value and accumulate it.

const mainData = [{
    "id": "4324",
    "productName": "Apple",
    "productPrice": 250,
  },
  {
    "id": "656546b",
    "productName": "Banana",
    "productPrice": 500,
  },
  {
    "id": "5656",
    "productName": "Soup",
    "productPrice": 800,
  }
];

const chosenData = ['5656', '656546b']

const newArray = chosenData.reduce((acc, curr) => {

  const findById = mainData.find(item => item.id === curr);
  findById && (acc += findById.productPrice)
  return acc;

}, 0)


console.log(newArray)

about 4 years ago · Juan Pablo Isaza Report

0

Your newArray is an array. You can't access its property like newArray.productPrice. You want to compute a value from your newArray, so you can use reduce(). Building up on your code

const mainData = [
    {
        "id": "4324",
        "productName": "Apple",
        "productPrice": 250,
    },
    {
        "id": "656546b",
        "productName": "Banana",
        "productPrice": 500,
    },
    {
        "id": "5656",
        "productName": "Soup",
        "productPrice": 800,
    }
];

const chosenData = ['5656', '656546b']
  
  const newSum = chosenData.map((value, index) => ({
    productPrice: mainData.find((data) => data.id === value)
  })).reduce((agg,x) => {
  return agg + x.productPrice.productPrice
  },0);


console.log(newSum)

If you don't want to complicate with too many properties you can use this code:

const mainData = [
    {
        "id": "4324",
        "productName": "Apple",
        "productPrice": 250,
    },
    {
        "id": "656546b",
        "productName": "Banana",
        "productPrice": 500,
    },
    {
        "id": "5656",
        "productName": "Soup",
        "productPrice": 800,
    }
];

const chosenData = ['5656', '656546b']
  
  const newSum = chosenData.map((value, index) => mainData.find((data) => data.id === value).productPrice).reduce((agg,x) => agg + x,0);


console.log(newSum)

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!