【发布时间】:2016-07-04 18:09:24
【问题描述】:
我需要在 json 数组中找到具有相同名称属性的每个元素,例如这里 Alaska 是两次,然后我需要比较两个对象的 lastupdate 并选择具有最新更新时间的那个。采用 stackoverflow 中的答案(对不起,我丢失了链接)我可以删除具有相同名称属性的对象,但我怎样才能保留最新更新时间的对象?
[{
"name": "Alaska",
"Republican_fre": 3,
"Democrats_fre": 0,
"winner": "R",
"iso_2": "AK",
"electoral_vote": 3,
"totalComponents": 3,
"date": "29.06.2016",
"lastupdate": "1467233426"
}, {
"name": "Alabama",
"Republican_fre": 3,
"Democrats_fre": 0,
"winner": "R",
"iso_2": "AL",
"electoral_vote": 9,
"totalComponents": 3,
"date": "29.06.2016",
"lastupdate": "1467233426"
}, {
"name": "Arkansas",
"Republican_fre": 2,
"Democrats_fre": 0,
"winner": "R",
"iso_2": "AR",
"electoral_vote": 6,
"totalComponents": 2,
"date": "29.06.2016",
"lastupdate": "1467233426"
},
{
"name": "Alaska",
"Republican_fre": 5,
"Democrats_fre": 0,
"winner": "R",
"iso_2": "AK",
"electoral_vote": 3,
"totalComponents": 5,
"date": "29.06.2016",
"lastupdate": "1467282133"
}]
代码:
function arrUnique(arr) {
var cleaned = [];
data.forEach(function(itm) {
var unique = true;
cleaned.forEach(function(itm2) {
var minValue = Math.min(itm.lastupdate, itm2.lastupdate)
if (_.isEqual(itm.name, itm2.name)){
unique = false;
}
});
if (unique) cleaned.push(itm);
});
return cleaned;
}
var uniqueStandards = arrUnique(data);
预期输出 预期的输出是它保留了具有最新“lastupdate”值的 Alsaka 对象之一。因此,它首先检查具有相同名称属性的对象,然后比较 lastupdate 值并保留具有最新值的对象
【问题讨论】:
-
你应该为此使用 lodash 库。
-
“选择更新时间最近的”是什么意思?你想从 JSON 中删除其他人还是想要别的东西?
-
预期结果是什么?
-
@developer033 预期的输出是它保留了具有最新“lastupdate”值的 Alsaka 对象之一。因此,它首先检查具有相同名称属性的对象,然后比较 lastupdate 值并保留具有最新值的对象
标签: javascript angularjs json underscore.js