Javascript ES6过滤器内部过滤器

Javascript ES6过滤器内部过滤器,javascript,Javascript,这是怎么回事?我很难理解这一点 const arr1=[{id:1,name:jhon},{id:2,name:max},{id:3,name:fer}]; 常数arr2=[8,9]; var diffArray=arr2.filterx=>!arr1.filtery=>y.id==x.length; console.logdiffArray 从filter方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。 Code x=>某些_代码称为箭头函数,可以转换为:functionx{

这是怎么回事?我很难理解这一点

const arr1=[{id:1,name:jhon},{id:2,name:max},{id:3,name:fer}]; 常数arr2=[8,9]; var diffArray=arr2.filterx=>!arr1.filtery=>y.id==x.length; console.logdiffArray 从filter方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。 Code x=>某些_代码称为箭头函数,可以转换为:functionx{return some_Code} 基本上,这里要做的是arr2.filter将返回所述arr2中通过条件的所有元素。这里的条件是,过滤后的arr1的长度必须为零,这意味着未找到匹配项。作为数值的数组长度可以用作真/假,并且可以用!。这就是这里发生的事情:

arr1.filter(y => y.id === x)          // means, give me elements of arr1, that are the same as in array 2
arr1.filter(y => y.id === x).length   // means, the length of said array of elements
!arr1.filter(y => y.id === x).length  // means, if length == 0 make it true and if more than 0 -> make it false
从filter方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。 Code x=>某些_代码称为箭头函数,可以转换为:functionx{return some_Code} 基本上,这里要做的是arr2.filter将返回所述arr2中通过条件的所有元素。这里的条件是,过滤后的arr1的长度必须为零,这意味着未找到匹配项。作为数值的数组长度可以用作真/假,并且可以用!。这就是这里发生的事情:

arr1.filter(y => y.id === x)          // means, give me elements of arr1, that are the same as in array 2
arr1.filter(y => y.id === x).length   // means, the length of said array of elements
!arr1.filter(y => y.id === x).length  // means, if length == 0 make it true and if more than 0 -> make it false
简化的

常数arr1=[{ id:1, 姓名:jhon }, { id:2, 姓名:马克斯 }, { id:3, 姓名:fer }]; 常数arr2=[8,9]; var diffArray=arr2.filterx=>{ 让元素SoFarry2PresentArray1=arr1.filtery=>{ 返回y.id==x }; 如果元素SoFarry2持续存在,则1.length>0{ 返回错误 }否则{ 返回true; } //`return!length;`如果长度>0,则返回false }; console.logdiffArray简化

常数arr1=[{ id:1, 姓名:jhon }, { id:2, 姓名:马克斯 }, { id:3, 姓名:fer }]; 常数arr2=[8,9]; var diffArray=arr2.filterx=>{ 让元素SoFarry2PresentArray1=arr1.filtery=>{ 返回y.id==x }; 如果元素SoFarry2持续存在,则1.length>0{ 返回错误 }否则{ 返回true; } //`return!length;`如果长度>0,则返回false }; console.logdiffArray甚至更短

let diffArray = arr2.filter(x => arr1.filter(y => y.id === x).length > 0 ? false : true)

甚至更短

let diffArray = arr2.filter(x => arr1.filter(y => y.id === x).length > 0 ? false : true)


它只是检查8和9是否不作为arr1中的id键存在,如果不存在,则返回这些数组值。如果您将任何对象的id更改为8,您将看到只返回9,反之亦然。!arr1.filtery=>y.id==x.length->!arr1.somey=>y.id==x会更有效,因为它会在第一次成功匹配后终止数组的迭代。length在做什么?@palaѕѕѕ,仅供参考,这是糟糕的代码。内部过滤器应该是!arr1.somey=>y.id==x或arr1.everyy=>y.id!==所以它一知道答案就停止了。这是这篇文章的答案。它只是检查8和9在arr1中是否不作为id键存在,如果不存在,则返回这些数组值。如果您将任何对象的id更改为8,您将看到只返回9,反之亦然。!arr1.filtery=>y.id==x.length->!arr1.somey=>y.id==x会更有效,因为它会在第一次成功匹配后终止数组的迭代。length在做什么?@palaѕѕѕ,仅供参考,这是糟糕的代码。内部过滤器应该是!arr1.somey=>y.id==x或arr1.everyy=>y.id!==所以它一知道答案就停止了。这是这篇文章的答案