user3205921
user3205921

Reputation: 51

Extract element having highest attribute value

I have below object, which can have many careerLevels (I have shown 2 for now):

    var input =
       {

       "careerLevel": "Associate",
       "careerLevels": [
           {
               "201609": 21,
               "201610": 22,
               "201611": 23,
               "careerID": "10000120"
           },
           {
               "201609": 31,
               "201610": 32,
               "201611": 33,
               "careerID": "10000130"
           }]
   };

I want to check careerID attribute and i need to extract that element which has highest careerID value. So in this case the output will look like :

var output=  {"201609": 31,
               "201610": 32,
               "201611": 33}

What i have tried is as below :

var res = Math.max.apply(Math, oldArr.careerLevels.map(function (o) { return o.careerID; })) // This gives me the highest careerID value

var highestOrderArr = oldArr.careerLevels.filter(element => { 
                // i think here i need to make a check for the comparison
});

Upvotes: 0

Views: 61

Answers (2)

Marcos Casagrande
Marcos Casagrande

Reputation: 40404

We can use reduce, to get the highest careerID and output that object.

var input ={
   "careerLevel": "Associate",
   "careerLevels": [
       {
           "201609": 21,
           "201610": 22,
           "201611": 23,
           "careerID": "10000120"
       },
       {
           "201609": 31,
           "201610": 32,
           "201611": 33,
           "careerID": "10000130"
       }]
};
   
const out = input.careerLevels.reduce((prev, current) => {
    return (prev.careerID > current.careerID) ? prev : current
}, false)

console.log(out);

Upvotes: 1

Ele
Ele

Reputation: 33726

An alternative is sorting and getting the last object.

var input = {  "careerLevel": "Associate",  "careerLevels": [{      "201609": 21,      "201610": 22,      "201611": 23,      "careerID": "10000120"    },    {      "201609": 31,      "201610": 32,      "201611": 33,      "careerID": "10000130"    }  ]},
    highest = input.careerLevels.sort((a, b) => a.careerID - b.careerID).pop();

console.log(highest);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Using the function reduce

var input = {  "careerLevel": "Associate",  "careerLevels": [{      "201609": 21,      "201610": 22,      "201611": 23,      "careerID": "10000120"    },    {      "201609": 31,      "201610": 32,      "201611": 33,      "careerID": "10000130"    }  ]},
    highest = input.careerLevels.reduce((a, c) => c.careerID > a.careerID ? c : a, {careerID: Number.MIN_SAFE_INTEGER});

console.log(highest);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Upvotes: 1

Related Questions