给定两个数组,编写一个函数来计算它们的交集。 - 输出结果中的每个元素一定是唯一的。(去重)

<!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
今日推荐