<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
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 赋值一个[]
/* if (pre.indexOf(cur) === -1) {
// 说明pre数组中不存在 cur 这个数据,需要把cur添加到 pre 数组中
// pre.push(cur)
// 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
}, [])
// 链式调用
// var res = arr1.filter(function (item, index) {
// return (arr2.indexOf(item) !== -1)
// }).reduce(function (pre, cur) {
// return (pre.indexOf(cur) === -1) ? pre.concat(cur) : pre
// }, []);
</script>
</body>
</html>
给定两个数组,编写一个函数来计算它们的交集。 - 输出结果中的每个元素一定是唯一的。(去重)
猜你喜欢
转载自blog.csdn.net/weixin_43901780/article/details/106838856
今日推荐
周排行