javascript !==正在工作,但===在函数内不工作

pexxcrt2  于 2022-11-27  发布在  Java
关注(0)|答案(2)|浏览(116)

为什么===不工作,而!==在typescript中的函数内工作?

const a = [
  {id: 4, name: 'Greg'},
  {id: 1, name: 'David'},
  {id: 2, name: 'John'},
  {id: 3, name: 'Matt'},
]; 
const b = [
  {id: 5, name: 'Mathew', position: '1'},
  {id: 6, name: 'Gracia', position: '2'},
  {id: 2, name: 'John', position: '2'},
  {id: 3, name: 'Matt', position: '2'},
];

const s = a.filter(({ id: idv }) => b.every(({ id: idc }) => idv !== idc));
console.log(s);

const r = a.filter(({ id: idv }) => b.every(({ id: idc }) => idv === idc));
console.log(r);
e3bfsja2

e3bfsja21#

解决方案

对于满足您要求的第二个条件,您需要使用Array.some(),如下所示-

const a = [{id: 4, name: 'Greg'}, 
{id: 1, name: 'David'},
{id: 2, name: 'John'}, 
{id: 3, name: 'Matt'}, ]; 

const b = [ {id: 5, name: 'Mathew', position: '1'}, 
{id: 6, name: 'Gracia', position: '2'}, 
{id: 2, name: 'John', position: '2'}, 
{id: 3, name: 'Matt', position: '2'}, ];

const s = a.filter(({ id: idv }) => b.every(({ id: idc }) => idv !== idc));
console.log(s);

const r = a.filter(({ id: idv }) => b.some(({ id: idc }) => idv === idc));
console.log(r);
hof1towb

hof1towb2#

逐步执行逻辑。
===中,你要求对数组a中的每一项进行过滤,以找出与b中的每一项具有相同id属性的项。因此,为了使这一操作合理,数组b中的每一项都必须具有相同的id。由于数组b中的每一项都具有不同的值,因此这是行不通的。
!==中,您要求对数组a中的每个项进行筛选,以查找在数组b中没有具有相同id属性的项。因此,它将在数组b中找到两个没有匹配id属性对的项。
如果这不是您要寻找的逻辑,请使用您要执行的操作更新问题,因为此处没有错误。
以下是有关您正在使用的两种方法的一些文档:
Array.filter()
Array.every()

相关问题