filter
gibt keinen booleschen Wert zurück, sondern gibt ein Array zurück, das Elemente des ursprünglichen Arrays enthält. Er entscheidet, welche Elemente in das Ergebnis aufgenommen werden sollen, indem er eine Funktion aufruft, die Sie für jedes Element des Arrays bereitstellen. Diese Funktion gibt einen booleschen Wert zurück: Wenn es truthy ist, wird dieses Element im Ergebnis enthalten. Die Argumente für die Funktion sind das Element (in Ihrer Funktion item
genannt) und seine Position im Array (pos
).
Diese Funktion verwendet indexOf()
, um die Position des ersten Elements im Array zu finden, das denselben Wert wie das Element hat, dem es zugewiesen wurde. Wenn diese Position mit der Position identisch ist, an der sie angegeben wurde, muss dieses Element das erste Vorkommen dieses Werts im Array sein. Daher gibt es true
zurück und das Element wird im Ergebnis enthalten sein. Wenn die Positionen unterschiedlich sind, muss dieses Element ein späteres Duplikat sein, sodass es false
zurückgibt und das Element nicht im Ergebnis enthalten ist. Das Endergebnis davon ist, dass nur die erste Kopie jedes Wertes in der resultierenden Filterung enthalten ist, was bedeutet, dass sie alle einzigartig sind.
Zum Beispiel: Angenommen das Array:
["a", "b", "a", "c"]
Auf der ersten Iteration item = "a"
und pos = 0
. a.indexOf(item)
gibt 0
zurück, und die Funktion gibt 0 == 0
zurück, das true
ist, so dass item
im Ergebnis enthalten ist.
In der zweiten Iteration item = "b"
und pos = 1
. a.indexOf(item)
gibt 1
zurück, und die Funktion gibt 1 == 1
zurück, das true
ist, so dass item
im Ergebnis enthalten ist.
In der dritten Iteration item == "a"
und pos = 2
. a.indexOf(item)
gibt 0
zurück, und die Funktion gibt 0 == 2
zurück, also false
, also item
ist nicht im Ergebnis enthalten.
Auf der vierten Iteration, item = "c"
und pos = 3
. a.indexOf(item)
gibt 3
zurück, und die Funktion gibt 3 == 3
zurück, das true
ist, so dass item
im Ergebnis enthalten ist.
Das Endergebnis ist, dass die Elemente der ersten, zweiten und vierten Iteration im Ergebnis enthalten sind, also ["a", "b", "c"]
.
Haben Sie die Dokumentation der 'Filter'-Funktion gelesen? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter Es erklärt, was die Argumente für die Callback-Funktion sind. – Barmar
Der Filter gibt keinen booleschen Wert zurück, sondern gibt ein gefiltertes Array zurück. Wenn der Callback "true" zurückgibt, wird item im Ergebnis enthalten, wenn false nicht. In diesem Fall ist das Prädikat - ist der aktuelle Index des Elements ('pos') der gleiche wie der Index des Elements im Array. Wenn nicht, ist das Objekt ein Duplikat und wir werden herausgefiltert. Lesen Sie etwas über [Array # filter] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter). –