 
					千秋此意
					把 return 往下移两行,你丢到for循环里了,也就是第一次循环就直接return了,后面的直接不执行了——————————————————————————感谢采纳,也补充个写法吧,顺便说下你问的关于indexOf方法,String.prototype.indexOf()和Array.prototype.indexOf()是两个方法,不过作用类似。数组的indexOf方法语法为arr.indexOf(ele, idx),将返回arr中ele首次出现的索引值,如果找不到则返回-1,idx是开始搜索的位置, 默认为0。function intersect(a, b) {
    return function(res, idx) {
        return idx < a.length ? arguments.callee(res.concat((!res.includes(a[idx]) && b.includes(a[idx])) ? a[idx] : []), ++idx) : res;
    }([], 0)
}
var b = [1, 2,2, 3, 4];
var c = [3, 5, 2, 4];
var result = intersect(b, c);
console.log(result); // => [ 2, 3, 4 ]
					
				
				
				
					 
					西兰花伟大炮
					<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <script>
            function compareArr(arr1,arr2){
                var arr_mid = [];
                for (var i = 0;i < arr2.length;i++) {
                    if(arr1.indexOf(arr2[i]) != -1){
                        arr_mid.push(arr2[i]);
                    }
                }
                return arr_mid;
            }
            arr1  = [1,2,4,6,7,9];
            arr2 = [1,3,5,6,7,8];
            console.log(compareArr(arr1,arr2));
        </script>
    </body>
</html>另外一个思路,旅行者说的是正确的