2017-02-22 8 views
-4

Hier ist der CodeWie funktioniert diese Funktion funktioniert,

var diffArray = function(a, b) { 
    return b.filter(function(value) { return a.indexOf(value) === -1; }); 
}; 

Eingang ist:

diffArray([1, "3", 3, "4"], [1, "1", 3, 4]); 

ich nicht bekommen, warum es zurückgibt: ["1", 4]

Können Sie bitte klarstellen, dass zu mich.

+3

es ist nicht, dass zurückgibt. http://jsbin.com/yecanun/1/edit?js,console – Quentin

+0

bitte das gewünschte Ergebnis hinzufügen. –

+0

Was sind Sie erwarten, dass die Funktion zurückkehrt und was gibt es eigentlich zurück? – Aron

Antwort

0

Erklären einige Dinge:

Array.indexOf Verfahren ist ein Verfahren, das ein Array für ein bestimmtes Element sucht und gibt den Index des Elements, wenn er sie findet. Wenn nicht, gibt es -1 zurück.

Array.filter empfängt eine Rückruffunktion. Diese Callback-Funktion wird einmal für jedes Element des Arrays aufgerufen und sollte true zurückgeben, wenn das Element im gefilterten Ergebnis vorhanden sein sollte, oder false, wenn dies nicht der Fall sein sollte. Beispiel: [1, 2, 3].filter(function(value) { return value < 3 }); würde [1, 2] zurückgeben.

Sie übergeben also 2 Arrays zu diffArray. Das b-Array wird gefiltert und die Filterfunktion durchsucht ein Array nach jedem Element des b-Arrays und gibt jedes Element des b-Arrays zurück, das nicht in einem Array vorhanden ist (jedes Element, das indexOf === -1 hat);

Also die b Elemente sind [1, "1", 3, 4]. Schauen sie sich in sie Schritt für Schritt:

  • 1 in einem vorhanden ist, so zurück es nicht, weil wir für die Elemente nicht in einem
  • „1“ ist nicht in einem so es wieder suchen . ein Array hat 1 Element, aber das ist eine andere Art von "1"
  • 3 ist vorhanden ist ein so ist es nicht zurückgegeben
  • 4 ist nicht in einer so zurückgegeben wird. Wieder gleichen Fall von unterschiedlicher Art wie "1"
  • .

ich hoffe, dass es jetzt klarer ist.

+1

Bitte kommentieren downvotes, damit wir verbessern können :) –

Verwandte Themen