理解这个破程序确实有点困难。
var a = new Set([1, 2, 3]); var b = new Set([4, 3, 2]); var intersect = new Set([...a].filter(x => b.has(x))); // {2, 3}
因为这个程序中有几个知识点需要理解。
1.[...a]
[...a] 是将集合转换为数组。 以后如果需要将集合转换成数组,基本都会使用这种方法。
2. [...a].()
Array.((x))依次将传入的函数(x)应用到每个元素上,x是该元素的值,然后根据返回值是true还是false来决定保留还是丢弃该元素。
这意味着遍历当前数组,当遍历到某个元素时,如果返回值为 false,则该元素会从数组中移除。
() 方法创建一个新数组,并检查新数组中的元素是否符合指定数组中的所有元素。
3. => 是缩写。
x => x * x
相当于:
function(x){return x*x}
所以 x => b.has(x) 本质上是一个等价于 (x){ b.has(x)} 的函数。
4.b.有(x)
Set.has(x)是set中的一个方法。 即判断当前集合是否包含x。 如果存在,则返回 true,如果不存在,则返回 false。
所以这个程序也可以写成:
var a = new Set([1, 2, 3]); var b = new Set([4, 3, 2]); var arr = [...a]; //将a转换成数组 var fArr = arr.filter(function(x){ //使用filter过滤数组,并将新数组返回到fArr return b.has(x); //判断b中是否含有a中的元素,没有则返回false }) var intersect = new Set(fArr); //将fArr转换成set console.log(fArr);
冰块
134***