Ich verwende die JS-Bibliothek Unterstrich und insbesondere die Aufrufe _.each
und _.sortby
Bibliothek. Ich frage mich, ob es eine Möglichkeit gibt, den Index des Werts innerhalb des Iterator-Delegaten abzurufen
_.sortBy([1, 4, 2, 66, 444, 9], function(num){
/*It'd be great to have access to the index in here */
return Math.sin(num);
});
javascript
underscore.js
Kontaktmatt
quelle
quelle
sortBy
ab der Version 4.17.4, die wahrscheinlich hilfreicher ist in diesem Szenario zu kennen.Sie können den Index der aktuellen Iteration abrufen
function
, indem Sie Ihrem Iterator einen weiteren Parameter hinzufügen , zquelle
Wenn Sie Ihr Array lieber transformieren möchten, wird dem
iterator
Parameter dermap
Funktion des Unterstrichs auch der Index als zweites Argument übergeben. So:... kehrt zurück:
quelle
Der Iterator von
_.each
wird mit 3 Parametern aufgerufen(element, index, list)
. Also ja, für_.each
Sie können Sie den Index bekommen.Sie können dasselbe in sortBy tun
quelle
Ich denke, es ist erwähnenswert, wie _.each () des Unterstrichs intern funktioniert. Das _.each (Liste, Iterat) prüft, ob die übergebene Liste ein Array-Objekt oder ein Objekt ist.
In dem Fall, dass die Liste ein Array ist, sind iterierte Argumente ein Listenelement und ein Index wie im folgenden Beispiel:
Wenn das Listenargument hingegen ein Objekt ist, nimmt der Iterat ein Listenelement und einen Schlüssel:
Als Referenz ist dies der Code _.each () aus Underscore.js 1.8.3
quelle
Unter den meisten Umständen bieten Unterstrichfunktionen, die eine Liste und ein Argument als erste beiden Argumente verwenden, dem Iterator Zugriff auf den Listenindex als vorletztes Argument. Dies ist eine wichtige Unterscheidung, wenn es um die beiden Unterstrichfunktionen _.reduce und _.reduceRight geht, die 'memo' als drittes Argument verwenden - bei diesen beiden ist der Index nicht das zweite Argument, sondern das dritte:
Wenn Sie möchten, können Sie den Index mit dem Unterstrich selbst abrufen :
_.last(_.initial(arguments))
. Eine mögliche Ausnahme (ich habe es nicht versucht) ist _.map, da ein Objekt anstelle einer Liste verwendet werden kann: "Wenn list ein JavaScript-Objekt ist, lauten die Argumente des Iterators (Wert, Schlüssel, Liste)." - siehe: http://underscorejs.org/#mapquelle
Wenn verfügbar, glaube ich, dass die meisten Lodash-Array-Funktionen die Iteration anzeigen. Das Sortieren ist jedoch nicht wirklich eine Iteration auf die gleiche Weise: Wenn Sie sich auf der Nummer 66 befinden, verarbeiten Sie das vierte Element im Array erst, wenn es fertig ist. Eine benutzerdefinierte Sortierfunktion durchläuft ein Array mehrmals und stößt benachbarte Zahlen vorwärts oder rückwärts an, bis sich alles an der richtigen Stelle befindet.
quelle