2016-07-06 25 views
1

Ich versuche, die Werte eines Arrays aus einem anderen Array herauszufiltern. Bei Verwendung der Javascript-Filtermethode sieht mein Skript so aus.Filtermethode Ersetzen eines Arrays durch ein anderes Array

var notUsed = ["Advanced Tac. Training Area", "Dunbarton Railroad Yard"]; 

var areas = ["A Area", "Advanced Tac. Training Area", "B Area", "Dunbarton Railroad Yard", "C Area"]; 

areas.filter(function(){ 
    return areas = notUsed; 
}) 
console.log(areas); 

Gemäß der Dokumentation, wenn ich tröste die areas Array, nachdem ich die Filterfunktion ausgeführt haben, sollte das Array aussehen dieser

"A Area", "B Area", "C Area" 

aber das ist nicht das, was passiert. Stattdessen erhalte ich die Werte des Arrays notUsed, so dass das Array im Wesentlichen durch das Array notUsed ersetzt wird. Kann mir jemand erklären, warum das passiert und wie ich das areas Array ohne die Werte des notUsed Arrays bekomme?

Wenn diese Frage bereits gestellt wurde, bitte lassen Sie mich in den Kommentaren und Link zu der beantworteten Frage wissen. auf diese Weise kann ich diese löschen und die Duplizierung beseitigen.

Antwort

1

Zwei Fehler.

  1. areas = notUsed einfach den Wert von notUsed zu areas zuweisen, es macht sich nicht zu vergleichen.

  2. filter gibt ein neues Array zurück. Es ändert das ursprüngliche Array nicht.

Wahrscheinlich können Sie es wie folgt nun

areas = areas.filter(function (area) { 
    return notUsed.indexOf(area) === -1; 
}); 

schreiben, die notUsed.indexOf(area) gibt den Index des area im notUsed Array. Wenn es nicht gefunden werden konnte, wird -1 zurückgegeben.

Siehe auch, wir weisen das Ergebnis filter zurück zu areas.

+0

Super, danke. Weißt du, warum das nicht in der Dokumentation erklärt oder demonstriert wird? Ich weiß, dass es erklärt, dass das ursprüngliche Array nicht geändert wird, aber es zeigt nicht, wie so etwas zu tun ist. Zumindest nicht, dass ich es gesehen habe. –

+0

@Robert Es gibt [einige Beispiele in MDN] (https: //developer.mozilla.org/de-DE/docs/Web/JavaScript/Referenz/Global_Objects/Array/filter # Beispiele). – thefourtheye

0

Sie haben die Verwendung von Filtern nicht richtig verstanden.

var notUsed = ["Advanced Tac. Training Area", "Dunbarton Railroad Yard"]; 

var areas = ["A Area", "Advanced Tac. Training Area", "B Area", "Dunbarton Railroad Yard", "C Area"]; 

var res = areas.filter(function(ele){ 
    return (notUsed.indexOf(ele) == -1) 
}) 
console.log(res); 
0

Die Filterfunktion sollte die Werte im Array gegen eine von Ihnen implementierte Bedingung testen. Dies ist in Ihrem Beispiel nicht der Fall. Filter Function

Dies könnte eine mögliche Lösung für Sie sein.

var notUsed = ["Advanced Tac. Training Area", "Dunbarton Railroad Yard"]; 
 

 
var areas = ["A Area", "Advanced Tac. Training Area", "B Area", "Dunbarton Railroad Yard", "C Area"]; 
 

 
var filtered = areas.filter(value => { return notUsed.indexOf(value) === -1 }) 
 
console.log(filtered);

0

filter() Methode erzeugt ein neues Array mit allen Elementen, die den Test durch die vorgesehene Funktion implementiert passieren.

var notUsed = ["Advanced Tac. Training Area", "Dunbarton Railroad Yard"];  
 
    var areas = ["A Area", "Advanced Tac. Training Area", "B Area", "Dunbarton Railroad Yard", "C Area"];  
 
    var out = areas.filter(function(index) { 
 
    return notUsed.indexOf(index) == -1; 
 
    }); 
 
    console.log(out);

Verwandte Themen