Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 删除具有条件的重复元素_Javascript_Node.js_Ecmascript 6 - Fatal编程技术网

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)将项目名称添加到
    集合中
    ,并将当前项添加到结果中 阵列