var Array = [{"Name":"Temp","Date":"2014-10-23"},
{"Name":"Temp","Date":"2014-10-22"},
{"Name":"Temp","Date":"2014-10-18"},
{"Name":"Temp","Date":"2014-10-19"},
{"Name":"Temp2","Date":"2014-10-12"},
{"Name":"Temp2","Date":"2014-06-12"}]
在以下条件下过滤上述数组的最佳方法是什么。
*如果名称相同,则过滤掉所有名称相同的对象,只留下日期最晚的对象。
我能想到的就是做循环。请注意,Date 是一个真正的 dateObject 而不是我上面写的字符串,这意味着您可以进行日期比较。
最佳答案
使用 Array.reduce()
,我能够将其归结为仅包含 Temp 和 Temp2 及其日期的对象:
var obj = array.reduce(function(base,cur){
if (base[cur.Name]) {
if (base[cur.Name].Date < cur.Date) {
base[cur.Name].Date = cur.Date;
} else {
return base;
}
} else {
base[cur.Name] = cur;
return base;
}
},{});
从那里,您可以使用 Object.keys().map()
获取对象的值:
array = Object.keys(obj).map(function(k){
return obj[k];
});
关于javascript - 按相同的名称和日期过滤数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26862175/