Javascript 删除具有条件的重复元素
我有一个如下所示的对象数组:Javascript 删除具有条件的重复元素,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,我有一个如下所示的对象数组: [ { project: "test1", date: "8/14/2018" }, { project: "test1", date: "8/15/2018" }, { project: "test2", date: "8/14/2018" } ] [ { project: "test1", date: "8/15/2018" }, { project: "test2", date: "8/14/2018" } ] 我想
[
{ project: "test1", date: "8/14/2018" },
{ project: "test1", date: "8/15/2018" },
{ project: "test2", date: "8/14/2018" }
]
[
{ project: "test1", date: "8/15/2018" },
{ project: "test2", date: "8/14/2018" }
]
我想根据项目名称删除重复的对象,但保留最新日期的对象
因此,我的最终阵列将如下所示:
[
{ project: "test1", date: "8/14/2018" },
{ project: "test1", date: "8/15/2018" },
{ project: "test2", date: "8/14/2018" }
]
[
{ project: "test1", date: "8/15/2018" },
{ project: "test2", date: "8/14/2018" }
]
我提出了一个我不满意的递归解决方案
寻找无痛方法的建议。对于此类问题,我通常采用的方法是维护一个“dictionary”对象,在迭代过程中跟踪唯一性,然后从该结果中提取最终结果<代码>减少是从多个值中创建一个值的常用工具:
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) 根据
字段对数组排序李>日期
- 2) 创建一个空的
,用于存储项目名称和结果的空数组李>集合
- 3) 迭代排序数组并检查:
- 3.1)如果
不包含当前项目名称,则:集合
- 3.2)将项目名称添加到
,并将当前项添加到结果中 阵列李>集合中