.filter函数中的for循环如何结束?

时间:2016-06-17 13:26:26

标签: javascript

以下是一个程序,是从第一个参数中删除的程序,它始终是一个数组,这些元素等于连续的参数。当我执行以下代码时,只有等于第一个参数的值从输入数组(第一个参数)中删除,但其余的都是完整的。

function destroyer(arr) {
  // Remove all the values
  var i;
  var arr = Array.prototype.slice.call(arguments);
  var arr_req = arr[0];
  arr_req = arr_req.filter(function(val) {
        for(i = 1; i < arr.length; i++) {
            if(val === arr[i]) {
                return false;
            } else {
                return true;
            }
        }
    });
    return arr_req;
}

console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));

但是当我在for循环中使用以下代码时,我得到了正确的预期输出,即[1,1]

arr_req = arr_req.filter(function(val) {
    for(i = 1; i < arr.length; i++) {
        if(val === arr[i]) {
            return false;
        }
    }
    return true;
});

那么,为什么在第一种情况下获得的结果不正确呢?它和后者不一样吗?我是JavaScript的新手。谁能解释一下?

1 个答案:

答案 0 :(得分:-1)

function destroyer(arr) {
   var i;
   var arr=Array.prototype.slice.call(arguments);
   var arr_req=arr[0];
   arr_req=arr_req.filter(function(val){
              var flag;
    for(i=1;i<arr.length;i++)
    {

        if(val===arr[i])
        {        
                flag=false;        
        return false;
        }else{
                flag=true;            
        }

    }
    return flag;
});

return arr_req; }

console.log(驱逐舰([1,2,3,1,2,3],2,3));