javascript - 如何从 JSON 数组中删除重复的对象

标签 javascript json

我有这样的 json 数组,

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"
}]

此 JSON 数组中有重复的值,例如,

[{
  "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"
}]

我需要保留最高的 DaysDiff 值(此处为 -8.47)并删除其他重复项。

最佳答案

这是我如何使用 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>

关于javascript - 如何从 JSON 数组中删除重复的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44537953/

相关文章:

php - JSON 解码不起作用

java - 如何使用 Jackson 的 ObjectMapper 将以下 JSON 转换为 POJO

javascript - RXJS 可观察拉伸(stretch)

javascript - jstree 自定义节点标记

JavaScript 舍入数字

javascript - 如果找到值,则返回解析为 bool 值 true 或 false 的 promise

java - 如何使用 json 对象和 jsonarray

jquery - jQuery getJSON 之后获取数据

java - 来自响应的 TextView

javascript - Knockout.js - 如何在 View 之间切换