1

I am having json array like this,

daysdif = [{
  "EmployeeID": "213654654",
  "DaysDiff": "NaN"
}, {
  "EmployeeID": "String",
  "DaysDiff": "NaN"
}, {
  "EmployeeID": "6021240",
  "DaysDiff": "-63.30"
}, {
  "EmployeeID": "6011327",
  "DaysDiff": "-35.67"
}, {
  "EmployeeID": "883",
  "DaysDiff": "-63.40"
}, {
  "EmployeeID": "1183",
  "DaysDiff": "-70.13"
}, {
  "EmployeeID": "1240",
  "DaysDiff": "-70.97"
}, {
  "EmployeeID": "2293",
  "DaysDiff": "-63.30"
}, {
  "EmployeeID": "5001839",
  "DaysDiff": "-8.47"
}, {
  "EmployeeID": "5001839",
  "DaysDiff": "-22.20"
}, {
  "EmployeeID": "5001839",
  "DaysDiff": "-23.77"
}, {
  "EmployeeID": "5001839",
  "DaysDiff": "-41.67"
}, {
  "EmployeeID": "5001839",
  "DaysDiff": "-63.97"
}, {
  "EmployeeID": "3395",
  "DaysDiff": "-68.00"
}, {
  "EmployeeID": "2473",
  "DaysDiff": "-66.20"
}, {
  "EmployeeID": "1075",
  "DaysDiff": "-70.17"
}, {
  "EmployeeID": "2947",
  "DaysDiff": "-69.10"
}, {
  "EmployeeID": "5002196",
  "DaysDiff": "-4.97"
}, {
  "EmployeeID": "5002196",
  "DaysDiff": "-39.23"
}, {
  "EmployeeID": "5002196",
  "DaysDiff": "-58.73"
}, {
  "EmployeeID": "1688",
  "DaysDiff": "-67.40"
}, {
  "EmployeeID": "2031",
  "DaysDiff": "-54.07"
}, {
  "EmployeeID": "1484",
  "DaysDiff": "-69.17"
}, {
  "EmployeeID": "1022",
  "DaysDiff": "-69.40"
}]

there are duplicate values in this JSON array like,

[{
  "EmployeeID": "5001839",
  "DaysDiff": "-8.47"
}, {
  "EmployeeID": "5001839",
  "DaysDiff": "-22.20"
}, {
  "EmployeeID": "5001839",
  "DaysDiff": "-23.77"
}, {
  "EmployeeID": "5001839",
  "DaysDiff": "-41.67"
}, {
  "EmployeeID": "5001839",
  "DaysDiff": "-63.97"
}]

i need to keep highest DaysDiff value (in here -8.47) and remove other duplicates.

Rajesh
  • 24,354
  • 5
  • 48
  • 79
Hashan
  • 37
  • 1
  • 2
  • Have you tried anything? – Rajesh Jun 14 '17 at 07:16
  • yes, i am able remove duplicate EmployeeIDs but i need to keep highest DaysDiff value. – Hashan Jun 14 '17 at 07:29
  • In the mentioned dupe, @aefxx is just replacing last value. Instead, check if object has that key and if yes, assign `Math.max(ObjectValue, CurrentValue)` – Rajesh Jun 14 '17 at 07:32
  • Also, if you share what have you tried so far, we could help you in rectification and showing better approach. But for this, first you have to try and fail. – Rajesh Jun 14 '17 at 07:33
  • This is not a JSON array. It's a plain old array. Please fix the title and content and tags of your post. –  Jun 14 '17 at 09:39

3 Answers3

1

Here how i achieved using underscore.js,

json_data = [
  {
    "EmployeeID": "213654654",
    "DaysDiff": "NaN"
  },
  {
    "EmployeeID": "String",
    "DaysDiff": "NaN"
  },
  {
    "EmployeeID": "6021240",
    "DaysDiff": "-63.30"
  },
  {
    "EmployeeID": "6011327",
    "DaysDiff": "-35.67"
  },
  {
    "EmployeeID": "883",
    "DaysDiff": "-63.40"
  },
  {
    "EmployeeID": "1183",
    "DaysDiff": "-70.13"
  },
  {
    "EmployeeID": "1240",
    "DaysDiff": "-70.97"
  },
  {
    "EmployeeID": "2293",
    "DaysDiff": "-63.30"
  },
  {
    "EmployeeID": "5001839",
    "DaysDiff": "-8.47"
  },
  {
    "EmployeeID": "5001839",
    "DaysDiff": "-22.20"
  },
  {
    "EmployeeID": "5001839",
    "DaysDiff": "-23.77"
  },
  {
    "EmployeeID": "5001839",
    "DaysDiff": "-41.67"
  },
  {
    "EmployeeID": "5001839",
    "DaysDiff": "-63.97"
  },
  {
    "EmployeeID": "3395",
    "DaysDiff": "-68.00"
  },
  {
    "EmployeeID": "2473",
    "DaysDiff": "-66.20"
  },
  {
    "EmployeeID": "1075",
    "DaysDiff": "-70.17"
  },
  {
    "EmployeeID": "2947",
    "DaysDiff": "-69.10"
  },
  {
    "EmployeeID": "5002196",
    "DaysDiff": "-4.97"
  },
  {
    "EmployeeID": "5002196",
    "DaysDiff": "-39.23"
  },
  {
    "EmployeeID": "5002196",
    "DaysDiff": "-58.73"
  },
  {
    "EmployeeID": "1688",
    "DaysDiff": "-67.40"
  },
  {
    "EmployeeID": "2031",
    "DaysDiff": "-54.07"
  },
  {
    "EmployeeID": "1484",
    "DaysDiff": "-69.17"
  },
  {
    "EmployeeID": "1022",
    "DaysDiff": "-69.40"
  }
]

grp_json = _.groupBy(json_data, "EmployeeID")

new_list = []

_.each(grp_json, function(i) { 
  get_max = _.max(i, "DaysDiff")
  if( get_max == -Infinity) { 
    new_list.push(i[0])    
  }
  else {
    new_list.push(get_max)
  }
})

console.log('new_list', new_list)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
Mohideen bin Mohammed
  • 18,813
  • 10
  • 112
  • 118
0

Please try this.

var daysdif = [{
  "EmployeeID": "213654654",
  "DaysDiff": "NaN"
}, {
  "EmployeeID": "String",
  "DaysDiff": "NaN"
}, {
  "EmployeeID": "6021240",
  "DaysDiff": "-63.30"
}, {
  "EmployeeID": "6011327",
  "DaysDiff": "-35.67"
}, {
  "EmployeeID": "883",
  "DaysDiff": "-63.40"
}, {
  "EmployeeID": "1183",
  "DaysDiff": "-70.13"
}, {
  "EmployeeID": "1240",
  "DaysDiff": "-70.97"
}, {
  "EmployeeID": "2293",
  "DaysDiff": "-63.30"
}, {
  "EmployeeID": "5001839",
  "DaysDiff": "-8.47"
}, {
  "EmployeeID": "5001839",
  "DaysDiff": "-22.20"
}, {
  "EmployeeID": "5001839",
  "DaysDiff": "-23.77"
}, {
  "EmployeeID": "5001839",
  "DaysDiff": "-41.67"
}, {
  "EmployeeID": "5001839",
  "DaysDiff": "-63.97"
}, {
  "EmployeeID": "3395",
  "DaysDiff": "-68.00"
}, {
  "EmployeeID": "2473",
  "DaysDiff": "-66.20"
}, {
  "EmployeeID": "1075",
  "DaysDiff": "-70.17"
}, {
  "EmployeeID": "2947",
  "DaysDiff": "-69.10"
}, {
  "EmployeeID": "5002196",
  "DaysDiff": "-4.97"
}, {
  "EmployeeID": "5002196",
  "DaysDiff": "-39.23"
}, {
  "EmployeeID": "5002196",
  "DaysDiff": "-58.73"
}, {
  "EmployeeID": "1688",
  "DaysDiff": "-67.40"
}, {
  "EmployeeID": "2031",
  "DaysDiff": "-54.07"
}, {
  "EmployeeID": "1484",
  "DaysDiff": "-69.17"
}, {
  "EmployeeID": "1022",
  "DaysDiff": "-69.40"
}];

var newArray = [];
var isExist = true;;

daysdif.forEach(function(data){
  isExist = true;
  if(data["DaysDiff"] !== "NaN"){
    newArray.forEach(function(obj){
        if(obj["EmployeeID"] == data["EmployeeID"]){
            newArray["DaysDiff"] = Math.max(parseFloat(data["DaysDiff"]), parseFloat(newArray["DaysDiff"])).toString();
          isExist = false;
        }
    });
        if(isExist){
            newArray.push(data);
        }
    }
});
console.log(newArray);
Hassan Imam
  • 21,956
  • 5
  • 41
  • 51
0

Try this....

var uniqueEmp=[];
for(var emp in daysdif){
    if(uniqueEmp.indexOf(daysdif[emp]['EmployeeID'])!=-1){
        daysdif.splice(emp,1);
    }else
        uniqueEmp.push(daysdif[emp]['EmployeeID'])  
}
console.log(daysdif)
Nofi
  • 2,107
  • 1
  • 15
  • 23