2016-06-17 5 views
-2

次のプログラムは、最初の引数から削除するプログラムです。常に配列であり、要素は連続した引数と等しくなります。次のコードを実行すると、最初の引数に等しい値だけが入力配列(最初の引数)から削除されますが、残りは元のままです。配列の終わりの.filter関数内のforループはどうですか?

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)); 

しかし、正しい結果が最初のケースでは得られない理由を私はループの内側に次のコードを使用する場合、私は正しい期待される出力を取得し、それは、そう[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が初めてです。誰でも説明できますか?

+5

最初のケースでは、 'for'ループは一度だけ実行されます。そこの 'return'ステートメントはループを壊します。 – Cerbrus

答えて

-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(destroyer([1,2,3,1,2,3]、2,3));

関連する問題