javascript - 将对象数组精炼为仅最新组

标签 javascript angularjs arrays

我只是想知道是否有人可以帮助我。我有一个充满对象的数组列表,每个对象都包含一个组号和一个日期。我想要做的是创建一个新数组,其中每个组号仅包含一个条目。该唯一条目应该是该组中的最新对象(使用日期值)。

例如,完整的数组可能是这样的:

var objectArray [
    {
        groupNumber: '1'
        date: '01/01/2016'
    },
    {
        groupNumber: '2'
        date: '02/01/2016'
    },
    {
        groupNumber: '3'
        date: '03/01/2016'
    },
    {
        groupNumber: '2'
        date: '04/01/2016'
    },
    {
        groupNumber: '3'
        date: '05/01/2016'
    },
    {
        groupNumber: '4'
        date: '06/01/2016'
    },
    {
        groupNumber: '5'
        date: '07/01/2016'
    },
    {
        groupNumber: '2'
        date: '08/01/2016'
    },
    {
        groupNumber: '2'
        date: '09/01/2016'
    },
]

但是新数组的结果应该是:

[
    {
        groupNumber: '1'
        date: '01/01/2016'
    },
    {
        groupNumber: '2'
        date: '09/01/2016'
    },
    {
        groupNumber: '3'
        date: '05/01/2016'
    },
    {
        groupNumber: '4'
        date: '06/01/2016'
    },
    {
        groupNumber: '5'
        date: '07/01/2016'
    },
]

这是否可能?如果可能,实现此目标的最有效方法是什么?我正在使用 angular,但如果可能的话,我不想引入任何额外的库。

谢谢。

最佳答案

您可以使用哈希表和 Array#reduce如果找到更近的日期,则进行交换。

此提案适用于未排序的数据。

var objectArray = [{ groupNumber: '1', date: '01/01/2016' }, { groupNumber: '2', date: '02/01/2016' }, { groupNumber: '3', date: '03/01/2016' }, { groupNumber: '2', date: '04/01/2016' }, { groupNumber: '3', date: '05/01/2016' }, { groupNumber: '4', date: '06/01/2016' }, { groupNumber: '5', date: '07/01/2016' }, { groupNumber: '2', date: '08/01/2016' }, { groupNumber: '2', date: '09/01/2016' }],
    hash = Object.create(null),
    result = objectArray.reduce(function (r, a) {

        if (!(a.groupNumber in hash)) {
            hash[a.groupNumber] = r.push(a) - 1;
            return r;
        }
        if ((new Date(r[hash[a.groupNumber]].date)) < (new Date(a.date))) {
            r[hash[a.groupNumber]] = a;
        }
        return r;
    }, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 将对象数组精炼为仅最新组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40491776/

相关文章:

javascript - 使用 JavaScript 交换菜单中的图像

javascript - 没有反射(reflect)我在 angularjs 中 `$rootScope` 的更改

javascript - AngularJS - 文本输入值未反射(reflect)在范围变量中

javascript - Jquery - 显示/隐藏隐藏的输入表单字段

javascript - 如何避免每次创建要部署在 glassfish 上的新 Java EE 包时复制整个 dojo 库?

javascript - 如何在 fadeTo() 之后初始化回原始状态?

angularjs - 如何按名称获取 AngularJS 元素?

c++ - char array[] 奇怪的输出

arrays - fortran90 或 gfortran 的约定 - 整数、实数、 double 和数组的声明

arrays - 删除与数组匹配的行