ES6过滤器内部过滤器

时间:2018-04-06 17:26:12

标签: javascript

这是如何工作的?我很难理解这一点。

const arr1 = [{"id":1,"name":"jhon"},{"id":2,"name":"max"},{"id":3,"name":"fer"}];
    
const arr2 = [8, 9];
var diffArray = arr2.filter(x => !arr1.filter(y => y.id === x).length);
console.log(diffArray);

3 个答案:

答案 0 :(得分:1)

MDN filter()方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。 代码x => some_code称为箭头函数,可以转换为:function(x) {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

答案 1 :(得分:1)

简化,

const arr1 = [{
  "id": 1,
  "name": "jhon"
}, {
  "id": 2,
  "name": "max"
}, {
  "id": 3,
  "name": "fer"
}];

const arr2 = [8, 9];

var diffArray = arr2.filter(x => {
  let elementsOfArray2PresentInArray1 = arr1.filter(y => {
    return y.id === x
  });

  if (elementsOfArray2PresentInArray1.length > 0) {
    return false
  } else {
    return true;
  }
  //`return !length;` will  return false if length > 0
});

console.log(diffArray)

答案 2 :(得分:0)

或更短;)

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

相关问题