## 1.给定两个数组,编写一个函数来计算它们的交集。 - 输出结果中的每个元素一定是唯一的。 ``` 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2]
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
```</p>
// 方法二:
var arr1 = [1, 2, 2, 3, 4, 5];
var arr2 = [2, 2, 3, 4, , 6, 7, 8];
// 输出的内容 [2,3,4]
// 循环拿出arr1数组中的每一个数据
/*
第一次调用 item = 1
arr2.indexOf(item) !== -1 === arr2.indexOf(1) !== -1 条件不成立 不会把item返回到新的数组,进性下一次调用filter
第二次调用 item = 2
arr2.indexOf(item) !== -1=== arr2.indexOf(2) !== -1 条件成立 会把item添加到新的数组
进行下一次调用
*/
// res得到两个数组中交集 [2,2,3,4]
var res = arr1.filter(function (item, index) {
// 那arr1中的数据 去arr2数组中检测在arr2是否存在
// arr2.indexOf(item) 检测arr2中否是有 item这个数据
// 有数据就返回到新数组里面 数据索引,没有数据返回 -1,只要不等于-1就说明数据存在
return (arr2.indexOf(item) !== -1)
});
/*
res = [2,2,3,4]
第一次调用
pre = [] cur =2 (pre.indexOf(cur) === -1) ? pre.concat(cur) : pre
return pre.push(cur)
*/
// 给res去掉重复的数据
var res1 = res.reduce(function (pre, cur) {
//给pre 赋值一个[]
// 等于-1说明cur不存在与pre中
if (pre.indexOf(cur) === -1) {
return pre.concat(cur)
} else {
return pre
}/* if (pre.indexOf(cur) === -1) {
// 说明pre数组中不存在 cur 这个数据,需要把cur添加到 pre 数组中
// pre.push(cur)
// 注意用push方法返回的是一个数组长度
// 要用concat方法返回一个拼接好的新数组
// pre.concat(cur)
return pre.concat(cur)
} else {
return pre
} */
// return (pre.indexOf(cur) === -1) ? pre.push(cur) : pre
// 不能使用push push 的返回值是一个数组的长度 下一次的pre就是数组的长度 并不是一个数组
// pre.indexOf is not a function出现这个错误
// indexOf这个方法名写错
// pre 没有这个方法
// 三目写法
// return (pre.indexOf(cur) === -1) ? pre.concat(cur) : pre
}, [])
console.log(res1)