2016-06-17 1 views
-2

Das folgende ist ein Programm, ist eine, die aus dem ersten Argument entfernt, das ist immer ein Array, die Elemente entsprechen aufeinander folgenden Argumente. Wenn ich den folgenden Code ausführe, werden nur die Werte, die dem ersten Argument entsprechen, aus dem Eingabearray entfernt (erstes Argument), aber der Rest ist intakt.Wie endet eine for-Schleife innerhalb einer .filter-Funktion für ein Array?

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

Aber wenn ich den folgenden Code innerhalb der for-Schleife verwenden, erhalte ich die richtige erwartete Ausgabe, dass [1,1]

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

so ist, warum ist nicht das richtige Ergebnis im ersten Fall erhalten ? Ist es nicht dasselbe wie letzteres? Ich bin neu in JavaScript. Kann mir jemand erklären?

+5

Im ersten Fall wird Ihre For-Schleife nur einmal ausgeführt. Die dortigen 'return'-Anweisungen unterbrechen die Schleife. – Cerbrus

Antwort

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

Rückkehr arr_req; }

console.log (Zerstörer ([1, 2, 3, 1, 2, 3], 2,3));

Verwandte Themen