这是如何工作的?我很难理解这一点。
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);
答案 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)