gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:42:32 25 4
gpt4 key购买 nike

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

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com