如何查找和删除两个不同阵列中匹配的元素?Javascript

如何查找和删除两个不同阵列中匹配的元素?Javascript,javascript,arrays,object,filter,Javascript,Arrays,Object,Filter,如何查找和删除在两个不同阵列中匹配的元素 例如 let arr = [ { startTimestamp: 1602675569525, name: "Pip" }, { startTimestamp: 1602664708822, name: "Jimmy" }, { startTimestamp: 1234, name: "Hero" } ]; let arr2 = [ { startTimesta

如何查找和删除在两个不同阵列中匹配的元素

例如

let arr = [
    { startTimestamp: 1602675569525, name: "Pip" },
    { startTimestamp: 1602664708822, name: "Jimmy" },
    { startTimestamp: 1234, name: "Hero" }
];

let arr2 = [
    { startTimestamp: 1602675569525, name: "Pip" },
    { startTimestamp: 1602664708822, name: "Jimmy" }, 
    { startTimestamp: 505050, name: "Kit" }

];
如果
startTimestamp
匹配,那么我想删除这些元素。输出应该是

[
   { startTimestamp: 1234, name: "Hero" },
   { startTimestamp: 505050, name: "Kit" }
]

我在下面尝试过这个,但它只给了我
[{startTimestamp:1234,name:“Hero”}]
,因为我只推arr[I],但我还需要
{startTimestamp:50505,name:“Kit”}

让newArr=[];
for(设i=0;i
最好将它们合并,然后按双精度过滤:

const newArr = [...arr, ...arr2].filter(
  (item, index, self) => item.findIndex(
    (prev) => prev.startTimestamp === item.startTimestamp
  ) === index
);

合并两个数组并通过删除重复的
startTimestamp
对象来过滤项是很好的

让arr=[
{startTimestamp:1602675569525,名称:“Pip”},
{startTimestamp:1602664708822,姓名:“吉米”},
{startTimestamp:1234,名字:“英雄”}
];
设arr2=[
{startTimestamp:1602675569525,名称:“Pip”},
{startTimestamp:1602664708822,姓名:“吉米”},
{startTimestamp:505050,名称:“Kit”}
];
const result=[…arr,…arr2]。筛选器((项,索引,原点)=>origin.filter((子项)=>subItem.startTimestamp==item.startTimestamp)。长度==1);

控制台日志(结果)到目前为止,您自己尝试了什么来解决这个问题?这种方法有什么问题?你为什么要问我们一个(基于意见的)“最佳方法”?@Andreas谢谢你的评论。真的只需要一种方法而不是最好的方法。这能回答你的问题吗?同时也要感谢你的评论。如果你有时间,你能帮我处理另一个用例吗?如果有重复的,我只想保留其中一个。因此,请参考上面相同的数组数据。输出将是“``[{startTimestamp:1602675569525,name:“Pip”},{startTimestamp:1602664708822,name:“Jimmy”},{startTimestamp:1234,name:“Hero”},{startTimestamp:50505,name:“Kit”}``谢谢每个数组上没有重复的吗?因此,arr1本身没有重复的
startTimestamp
,与
arr2
相同?无论如何,您可以这样做<代码>常量val=[…arr,…arr2].reduce((acc,cur)=>{if(!acc[cur.startTimestamp]){acc[cur.startTimestamp]=cur.name;}返回acc;},{});log(Object.entries(val.map)([startTimestamp,value])=>({startTimestamp,…value}))合并arr1和arr2后说。在这一点上,我们将有重复这发生在我的应用程序。然后,我只想保留其中一个副本,同时保留非副本值。上面将回答您的第二个问题。
const newArr = [...arr, ...arr2].filter(
  (item, index, self) => item.findIndex(
    (prev) => prev.startTimestamp === item.startTimestamp
  ) === index
);