首页 > 解决方案 > 这段代码如何找到两个对象数组之间的差异?

问题描述

我已经从 SO 的答案中测试了这段代码,它基本上只返回数组 1 中存在但数组 2 中不存在的项目。但我不知道这是如何工作的,有人可以解释一下吗?

const arrayOne = [ 
  { value: "4a55eff3-1e0d-4a81-9105-3ddd7521d642", display: "Jamsheer" },
  { value: "644838b3-604d-4899-8b78-09e4799f586f", display: "Muhammed" },
  { value: "b6ee537a-375c-45bd-b9d4-4dd84a75041d", display: "Ravi" },
  { value: "e97339e1-939d-47ab-974c-1b68c9cfb536", display: "Ajmal" },
  { value: "a63a6f77-c637-454e-abf2-dfb9b543af6c", display: "Ryan" },
];

const arrayTwo = [
  { value: "4a55eff3-1e0d-4a81-9105-3ddd7521d642", display: "Jamsheer"},
  { value: "644838b3-604d-4899-8b78-09e4799f586f", display: "Muhammed"},
  { value: "b6ee537a-375c-45bd-b9d4-4dd84a75041d", display: "Ravi"},
  { value: "e97339e1-939d-47ab-974c-1b68c9cfb536", display: "Ajmal"},
];

const results = arrayOne.filter(({ value: id1 }) => !arrayTwo.some(({ value: id2 }) => id2 === id1));

console.log(results);

我认为{ value: id1 }是解构赋值,但它似乎交换了键和值???和什么关系 id2 === id1

标签: javascriptnode.jsecmascript-6ecma

解决方案


我想说理解它的最好方法是使用一些老式的香草 JS 进行重构:

const results = arrayOne.filter(objectOne => {
  return !arrayTwo.some(objectTwo => {
    return objectOne.value === objectTwo.value;
  })
});

这里我没有使用对象解构,也没有使用省略return关键字,它使事情更加清晰。


推荐阅读