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

146
Views
Problem with filtering javascript multidimensional array of object

I want to filter out data from a multilayered JSON object:

    var players = [
    0:{
        id: "1"
        stats: 
        { 
          yellow_cards: "0" 
          saves: "0" 
        }
        explain: 
        [
        0:{
            fixture: "251"   
            stats: [
            0:{
                identifier: "minutes"
                points: "2" 
                value: "75"
              }  
            ] 
          }
        1:{ 
            fixture: "191" 
            stats: 
            [
            0:{
                identifier: "minutes"
                points: "2" 
                value: "83"
              }  
            1:{
                identifier: "assists"
                points: "3"
                value: "1"
              }
            ]
          }
        ]
      }
    ]    

I want to sort out the players who have at least one object where identifier = "minutes" and the value is between 50 and 60. If I loop through everything it works fine:

var selected = [];
  for(i=0; i<players.length; i++){
    for(j=0; j<players[i].explain.length; j++){
      for(k=0; k<players[i].explain[j].stats.length;k++){
        if(players[i].explain[j].stats[k].identifier == "minutes"){
          if(players[i].explain[j].stats[k].value >50 && players[i].explain[j].stats[k].value < 60) { 
            selected.push(players[i]);
          }
        }
      }
    }
  }

This takes too much time, and I'm sure there is a more elegant way to do this with array filter and find function. Any help with this is highly appreciated.

Edit: In order to keep it short the array above shows only one object which doesn't fulfill the criteria.

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

0

Instead of using this tradition for loop for nested filtering, you can achieve the same requirement via Array.filter() along with Array.some()

Here is the performance check with both the approaches : jsbench

enter image description here

Demo :

var players = [{
  id: "1",
  stats: { 
    yellow_cards: "0", 
    saves: "0" 
  },
  explain: [{
    fixture: "251", 
    stats: [{
      identifier: "minutes",
      points: "2",
      value: "75"
    }] 
  }, { 
    fixture: "191", 
    stats: [{
      identifier: "minutes",
      points: "2",
      value: "83"
    }, {
      identifier: "assists",
      points: "3",
      value: "1"
    }]
  }]
}];

const selected = players.filter(({ explain }) => {
  return explain.some(({ stats }) => {
    return stats.some(({ identifier, value }) => {
      return identifier === "minutes" && (value > 50 && value < 60)
    })
  })
})

console.log(selected);

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!