October 22, 2024
Chicago 12, Melborne City, USA
javascript

Sorting JSON object and filtering


This is my code for combining and grouping data from 2 CSV file.

const csv = require('csv-parser')
const fs = require('fs')

var matchesData = {}
var innData = []
var convertedObject = {}

function convertIntoObject(){
  for (let i = 0; i < innData.length; i++) {

    if(!convertedObject[innData[i].SEASON]){
            convertedObject[innData[i].SEASON] = {}
        }
    if(!convertedObject[innData[i].SEASON][innData[i].BOWLER]){
      convertedObject[innData[i].SEASON][innData[i].BOWLER] = {}
    }

    if(!convertedObject[innData[i].SEASON][innData[i].BOWLER].totalRuns && 
      !convertedObject[innData[i].SEASON][innData[i].BOWLER].balls &&
      !convertedObject[innData[i].SEASON][innData[i].BOWLER].economy
     )
    convertedObject[innData[i].SEASON][innData[i].BOWLER] = 
   {    "totalRuns": 0,
        "balls": 0, 
        "economy": 0
    }


    convertedObject[innData[i].SEASON][innData[i].BOWLER] = 
   {    "totalRuns": Number(convertedObject[innData[i].SEASON][innData[i].BOWLER].totalRuns) + (innData[i].TOTAL_RUNS - innData[i].BYE_RUNS - innData[i].LEGBYE_RUNS),
        "balls": Number(convertedObject[innData[i].SEASON][innData[i].BOWLER].balls) + 1, 
        "economy": (Number(convertedObject[innData[i].SEASON][innData[i].BOWLER].totalRuns) / (convertedObject[innData[i].SEASON][innData[i].BOWLER].balls / 6)).toFixed(2)
    }
}
}

fs.createReadStream('matches.csv')
  .pipe(csv())
  .on('data', (data) => {
  matchesData[data.MATCH_ID] = data.SEASON
  })
  .on('end', () => {
    //console.log(matchesData)
  });
  

  fs.createReadStream('deliveries.csv')
  .pipe(csv())
  .on('data', (data) => {
    innData.push({...data, "SEASON": matchesData[data.MATCH_ID]})
  })
   .on('end', () => {
    convertIntoObject()
    fs.writeFileSync("output.txt", JSON.stringify(convertedObject))
  });

Output that’s generated is

{
    "2008": {
        "P Kumar": {
            "totalRuns": 366,
            "balls": 275,
            "economy": "8.01"
        },
        "Z Khan": {
            "totalRuns": 357,
            "balls": 258,
            "economy": "8.31"
        },
    },
    "2009": {
        "AA Noffke": {
            "totalRuns": 366,
            "balls": 275,
            "economy": "8.01"
        },
        "JH Kallis": {
            "totalRuns": 357,
            "balls": 258,
            "economy": "8.31"
        },
    }
}

Now I want to get top 10 teams for each year with best economy. I am not able to find a solution as to how to sort this data based on economy key and then filter top 10 teams.
I want this output also be updated in the following format:

{ "2008": [ ["P Kumar": { "totalRuns": 366, "balls": 275, "economy": "8.01" }], ["Z Khan": { "totalRuns": 357, "balls": 258, "economy": "8.31" }], ], "2009": [ ["AA Noffke": { "totalRuns": 366, "balls": 275, "economy": "8.01" }], ["JH Kallis": { "totalRuns": 357, "balls": 258, "economy": "8.31" }], ] }



You need to sign in to view this answers

Leave feedback about this

  • Quality
  • Price
  • Service

PROS

+
Add Field

CONS

+
Add Field
Choose Image
Choose Video