Javascript: drucken Sie den index eines array
Ich habe diese Frage in einem interview
Mithilfe von javascript schreiben, die ein array von n Elementen. Jedes element im array eine Funktion, die Anrufe Konsole.log von seinen eigenen index. Für zB das erste element-Konsole.log 0, die zweite element-Konsole.Protokoll 1....
Vielen Dank im Voraus
Edit: Sorry für die Fragen vor der recherche. Im neuen Programmierung & weiß nicht, was die Schließung ist & konnte nicht finden, etwas zu suchen. Ich habe die Antwort selbst, aber hier ist das problem, das ich hatte. Ich schrieb so etwas wie dieses
n = 10
var array = []
for (var i=0; i < n; i ++) {
array[i] = function() {
console.log(i);
}
}
for (var j=0; j < n; j ++) {
array[j]()
}
- Was ist Ihr problem? Was haben Sie versucht? Wissen Sie, Verschlüsse?
- Ich habe diese Frage in einem interview-keine. Dies ist sogar noch einfacher als fizzbuzz (Englisch).
- exakte Kopie von Javascript-Verschluss in Schleifen - einfache praktische Beispiel
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es nicht eine einfache Möglichkeit zu tun, was Sie Fragen, weil, wenn Sie eine Funktion, die in jedem array-element die Funktion nicht wissen was es ist, array-index war, es sei denn, Sie irgendwie gebunden eine benutzerdefinierte Funktion für jedes array-index.
Aber, all dies klingt ein wenig, wie Sie nicht sind, die uns erzählen, was das eigentliche problem ist. Wenn Sie die Iteration über ein array und eine Funktion aufrufen, die in der array-Elements ist, dann geben Sie einfach die index-Funktion als erstes argument.
Könnten Sie nennen jede Funktion im array und übergeben Sie den index-Steckplatz wie diese:
Oder sagen Sie uns, was das eigentliche problem ist, damit wir mehr direkt lösen helfen, die.
[fn1, fn1, fn1, …, fn1]
?fn1
nur als Beispiel, der rest der Funktion Definitionen bleibt dem Leser selbst überlassen.Hier ist eine (von mehreren Möglichkeiten), es zu tun.
this
beziehen sich auf den array, wenn Sie die Funktion aufrufen, in der Weisearr[index]()
.arguments.callee
bezieht sich auf die Funktion selber, in sich selber. Also die Funktion sucht sich selbst innerhalb des Arrays, dass es verbunden ist und gibt den gefundenen index.BEARBEITEN
Als jfriend00 darauf hingewiesen, correnctly,
arguments.callee
ist veraltet und wird nicht unterstützt im strict-Modus.So, hier ist eine "sauberere" Lösung (mit Vorschlag von Bergi):
arguments.callee
wird nicht unterstützt im strikten Modus ist wohl, wie wir sein sollten code schreiben, entweder jetzt oder in der Zukunft.function findme(){ console.log(this.indexOf(findme)); }
indexOf
würde, beziehen sich immer auf den index 0. Aber ich denke, wenn Sie erstellen eine Schließung um es dann würde es auch funktionieren. Ja, gute Idee.function printIndex(){...}
gewonnen ' T Arbeit für mich. Ich bin mir nicht sicher, ob es standard-Verhalten oder nicht, aber zumindest in Chrome die Funktion wird offenbar werden gehisst nach ganz oben und wird nur ausgewertet, einmal. Aber vielleicht meintest du "named function expressions". Ich habe gerade rausgefunden, dass diese (var c = function printIndex() {...}
) tatsächlich funktioniert (siehe aktualisierte Antwort).func
oderc
aber Recht in derpush()
nennen.