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

120
Views
Json Path sum functions for List of List

I am using JSON path to do something similar to this:

I have copied the JSON path example, but modified the price field to represent price Year-over-Year (number to array).

{
  "store": {
    "book": [
      {
        "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": [ 1, 2, 3 ]
      },
      {
        "category" :"fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": [ 1, 2, 3 ]
      },
      {
        "category": "fiction",
        "author": "Herman Melville",
        "title": "Moby Dick",
        "isbn": "0-553-21311-3",
        "price": [ 1, 2, 3 ]
      },
      {
        "category": "fiction",
        "author": "J. R. R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": [ 1, 2, 3 ]
      }
    ],
    "bicycle": {
      "color": "red",
      "price": [ 1, 2, 3 ]
    }
  },
  "expensive": 10
}

What I want to find is the year over year total price for all the books.

I can get a Array of Array (lets say res) using: $.store.book[*].price

Output:

[
   [ 1, 2, 3 ],
   [ 1, 2, 3 ],
   [ 1, 2, 3 ],
   [ 1, 2, 3 ]
]

I want to further reduce this output (by sum) to:

[4, 8, 12] // Sum up nth element of each array.
           // (res[0][0] + res[1][0] + res[2][0] + res[3][0] = 4 ... and so on)

Is there a way to achieve this using jsonpath (preferred)/any other JavaScript syntax ?

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

0

let data = [
  [ 1, 7, 3 ],
  [ 2, 6, 3 ],
  [ 3, 5, 3 ],
  [ 4, 4, 3 ]
]

let result = data[0].map((_, colIndex) => data.map(row => row[colIndex]))
                    .map(value => value.reduce((acc, value) => acc + value, 0))

console.log(result)   // [ 10, 22, 12 ]

The first map transposes rows and columns, the second map sums up what after the transpose are the rows.

about 4 years ago · Juan Pablo Isaza Report

0

const data = {
  "store": {
    "book": [{
        "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": [1, 2, 3]
      },
      {
        "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": [1, 2, 3]
      },
      {
        "category": "fiction",
        "author": "Herman Melville",
        "title": "Moby Dick",
        "isbn": "0-553-21311-3",
        "price": [1, 2, 3]
      },
      {
        "category": "fiction",
        "author": "J. R. R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": [1, 2, 3]
      }
    ]
  }
}

const prices = []

data.store.book.forEach(book => {
  book.price.forEach((price, index) => {
    if (!prices[index]) prices[index] = 0;
    prices[index] += price;
  })
})

console.log(prices)

about 4 years ago · Juan Pablo Isaza Report

0

You can use some .map() and Array.prototype.reduce() paired with comma operator.

const a = { "store": { "book": [{ "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": [1, 2, 3] }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": [1, 2, 3] }, { "category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": [1, 2, 3] }, { "category": "fiction", "author": "J. R. R. Tolkien", "title": "The Lord of the Rings", "isbn": "0-395-19395-8", "price": [1, 2, 3] } ], "bicycle": { "color": "red", "price": [1, 2, 3] } }, "expensive": 10 }.store.book

console.log(a.map(x=>x.price).reduce((x,y)=>(y.map((i,z)=>x[z]+=y[z]),x)))

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!