假设我有这个:
const list1 = [{id: 1, lastModified: 1513016523527}, {id: 2, lastModified: 1513016523529}];
const list2 = [{id: 1, lastModified: 1513016577222}, {id: 3, lastModified: 1513016605676}];
如果它们具有相同的ID,我认为两个项目是相同的,即使lastModified不同。如何合并这两个列表,忽略重复?
预期结果(请注意,只有一个id为1的对象):
[{id: 1, lastModified: 1513016523527}, {id: 3, lastModified: 1513016605676}, {id: 2, lastModified: 1513016523529}]
(在重复的情况下,我不关心lastModified在合并数组中的结束。另外,我不关心结果的顺序。)
我有两个想法:第一个是对两个列表进行排序,并从两端弹出,就像在合并排序中一样,添加条件是在弹出一个项目之后,如果它是相同的,我们不会将它附加到合并列表中作为我们附加到合并列表的最后一项。
第二个想法是将两个列表中的每个项目都放在一个以id为键的hashmap中,然后迭代映射中的键以创建列表。
但是,我想知道从代码可读性角度来看是否有一种更简单的方法可以做到这一点,比如内置的合并函数,它采用自定义相等比较函数或其他东西。此外,时间复杂度应优于O(n ^ 2)。
我在这里查看了答案,但它们要么不支持自定义比较功能,要么不支持vanilla javascript,要么时间复杂度不高:How to merge two arrays in JavaScript and de-duplicate items