我有一个看起来像这样的对象数组:
[
{ project: "test1", date: "8/14/2018" },
{ project: "test1", date: "8/15/2018" },
{ project: "test2", date: "8/14/2018" }
]
我要根据项目名称BUT删除重复的对象,并保留最新的对象。
所以我的最终数组是这样的:
[
{ project: "test1", date: "8/15/2018" },
{ project: "test2", date: "8/14/2018" }
]
我想出了一个令我不满意的递归解决方案。
正在寻找一种不费吹灰之力的建议。
答案 0 :(得分:1)
我通常针对此类问题的方法是维护一个“字典”对象以在迭代过程中跟踪唯一性,然后从该结果中提取最终结果。 reduce
是从多个值中创建一个值的首选工具:
const dict = objects.reduce((result, item) => {
const currentForProject = result[item.project];
const isMostRecent =
!currentForProject
|| new Date(item.date) > new Date(currentForProject.date);
if (isMostRecent) {
result[item.project] = item;
}
return result;
}, {});
const mostRecents = Object.values(dict);
答案 1 :(得分:0)
我将提出通用算法来解决您的任务,但具体实现取决于您。
date
字段对数组进行排序; Set
用于存储项目名称,并为结果创建一个空数组; Set
不包含当前项目名称,则:Set
并将当前项目添加到结果中
数组;