javascript React JS比较两个不同对象数组中的值

vhipe2zx  于 2023-06-28  发布在  Java
关注(0)|答案(1)|浏览(121)

我正在寻找一个简单的解决方案来比较两个不同对象数组中的“id”值和“type”,如下所示:

var arr_a = [
  { id: 1, name: "thumbler", type: "add" },
  { id: 2, name: "spoon", type: "add" },
  { id: 3, name: "plate", type: "add" },
];

var arr_b = [
  { id: 1, name: "thumbler", type: "remove" },
  { id: 2, name: "spoon", type: "add" },
  { id: 3, name: "plate", type: "add" },
  { id: 4, name: "fork", type: "add" },
];

我想要这样的结果

var arr_c = [
  { id: 1, name: "thumbler", type: "remove" },
  { id: 4, name: "fork", type: "add" },
];

我尝试使用filter和some(from here),但不起作用:

var arr_c = arr_b.filter(
  (x) =>
    arr_a.filter((y) => y.id === x.id && y.action_type === x.action_type)
      .length > 0
);

有什么建议吗?

mspsb9vt

mspsb9vt1#

您可以使用数组的everysome方法来实现您的结果。请参见下面的片段。

let arr_c = arr_b.filter(a => arr_a.some(a1 => a1.id === a.id && a.type !== a1.type) || arr_a.every(a1 => a1.id !== a.id))

完整工作代码:-

var arr_a = [{id:1, name:"thumbler", type:"add"},
             {id:2, name:"spoon", type:"add"},
             {id:3, name:"plate", type:"add"}];

var arr_b = [{id:1, name:"thumbler", type:"remove"},
             {id:2, name:"spoon", type:"add"},
             {id:3, name:"plate", type:"add"},
             {id:4, name:"fork", type:"add"}];
var arr_c = arr_b.filter(a => arr_a.some(a1 => a1.id === a.id && a.type !== a1.type) || arr_a.every(a1 => a1.id !== a.id));

console.log(arr_c);

相关问题