【发布时间】:2022-01-02 15:46:26
【问题描述】:
我有两个列表:
let originalDocs = [
{
id: "sara",
date: new Date("01/01/2022")
},
{
id: "vic",
date: new Date("10/26/2020")
}
];
let newDocs = [
{
id: "vic",
date: new Date("01/02/2022")
},
{
id: "raul",
date: new Date("05/05/2021")
}
];
我需要混合两个列表,按日期排序(按降序排列)并且不重复。
为了做到这一点,我决定:
- 删除原始数组中包含在新数组中的元素集(我的意思是删除交集)而不修改原始数组。
- 按日期混合结果数组排序。
这是我当前的代码:
function removeIntersection(originalDocs, newDocs) {
return originalDocs.filter((originalDoc) => {
const index = newDocs.findIndex(
(newDoc) => newDoc.id === originalDoc.id
);
return index === -1;
});
}
function mixInOrder(originalDocs, newDocs) {
return [...newDocs, ...originalDocs]
.sort((a, b) => b.date - a.date);
}
//
// MAIN
//
let originalDocs = [
{
id: "sara",
date: new Date("01/01/2022")
},
{
id: "vic",
date: new Date("10/26/2020")
}
];
let newDocs = [
{
id: "vic",
date: new Date("01/02/2022")
},
{
id: "raul",
date: new Date("05/05/2021")
}
];
const result = mixInOrder(
removeIntersection(originalDocs, newDocs),
newDocs
);
console.log(result);
我怎样才能以更优化的方式做同样的事情,我的意思是,在排序之前不需要合并(使用扩展语法)列表,或者删除 O(1) 中的交集。
我的意思是,是否可以只插入以避免复制?
【问题讨论】:
-
如果两个数组中都存在一个
id相同的项,你想保留哪一个? -
@tao 在示例 sn-p 中,OP 从
newDocs获取一个项目 -
@tao,第二个列表“newDocs”中的那个。
-
@404,upsss,我的意思是删除交集但不修改这个数组。我在减速器中执行这段代码,所以我不能修改它。
标签: javascript algorithm