javascript - 按相同的名称和日期过滤数组

标签 javascript arrays

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/

相关文章:

javascript - UI Bootstrap Modal 弹出窗口无法与 AngularJS 一起正常工作

javascript - 在 JavaScript 中读取 Firebase 数据库后,For 循环不起作用

javascript - 如何将动态术语/排序添加到以下排序函数?

javascript - 根据索引的嵌套数组的总和

c# - 如何将字符串数组转为int数组进行计算?

javascript - 从输入字符串中获取包含字符及其 ANSI 颜色的数组

php - 如何使用ajax将数组从html传递到php

java - 从数组java中删除对象

java - 从字符串中提取每个单独的数字

javascript - Angular:使用 @Input() 传递数据