2017-01-23 2 views
1

Die Aufgabe ist:Array.filter nicht Array Aktualisierung

Sie werden mit einem anfänglichen Array (das erste Argument in der Zerstörers Funktion) bereitgestellt werden, gefolgt von einem oder mehreren Argumenten. Entfernen Sie alle Elemente aus dem ursprünglichen Array, die denselben Wert wie diese Argumente haben.

Während durch sie arbeiten, fand ich einige Array.filter Verhalten Ich bin zu kämpfen, zu verstehen:

function destroyer(arr) { 
    for (var i = 1; i<arguments.length; i++){ 
    toDelete = arguments[i]; 
    arr.filter(isItIn); 
    } 
    return arr; 
} 

function isItIn(item, undefined, array){ 
    return item!=toDelete; 
} 

destroyer([1, 2, 3, 1, 2, 3], 2, 3); 

Meine Absicht war hier durch die Elemente iterieren 1+ der Argumente, arr.filter jedes Mal aufgerufen wird. Arr.filter ruft dann isItIn auf, die prüft, ob der aktuell geprüfte Artikel derjenige ist, nach dem ich suche. arr wird jedoch unverändert zurückgegeben. Wenn ich isItIn ändern:

function isItIn(item, undefined, array){ 
    return item==1; 
} 

zu testen, ist es nach wie vor unverändert, jedoch console.log s in dem ursprünglichen Schreiben von isItIn zeigt, dass es die Argumente korrekt empfangen (oder so weit, wie ich gedacht habe bei zu bestimmen, dest.

Bitte beachten Sie, dass ich das Problem durch eine andere Route gelöst habe, ich bin nicht auf der Suche nach einer Lösung für das Problem, nur eine Erklärung, wo mein ursprünglicher Code falsch gelaufen ist.

Antwort

4

Grundsätzlich Sie verwenden Array#filter und das Ergebnis davon weglassen

Sie müssen das Filterergebnis dem vorherigen Array zuweisen.

arr = arr.filter(isItIn); 

function destroyer(arr) { 
 
    for (var i = 1; i < arguments.length; i++) { 
 
     toDelete = arguments[i]; 
 
     arr = arr.filter(isItIn); 
 
    } 
 
    return arr; 
 
} 
 

 
function isItIn(item) { 
 
    return item != toDelete; 
 
} 
 

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

+1

Oh my ... Wenn Sie irgendeine Ahnung, wie lange ich das sah habe, – MrB

0

Sie haben das zurückgegebene Array zuweisen:

function destroyer(arr) { 
    for (var i = 1; i<arguments.length; i++) { 
     toDelete = arguments[i]; 
     arr = arr.filter(isItIn); 
    } 
    return arr; 
} 
Verwandte Themen