2016-04-14 9 views
1

Ich habe eine array Wich enthält mehrere gleiche WerteJavascript indexOf Methode mit mehreren Werten

["test234", "test9495", "test234", "test93992", "test234"] 

Hier habe ich den Index jedes test234 im Array

Dafür bekommen ich habe versucht Array.prototype.indexOf() Methode. Aber es gibt mir nur 0 zurück, aber ich möchte es mir [0, 2, 4] zurückgeben.

Wie kann ich das tun?

var array = ["test234", "test9495", "test234", "test93992", "test234"]; 
 
document.write(array.indexOf("test234"));

+0

Mögliche Duplikat [Wie Index aller Vorkommen eines Elements in einem Array zu finden?] (Http://stackoverflow.com/questions/20798477/how-to-find-index -of-all-vorkommnisse-eines-element-in-array) – 4castle

+0

Diese Frage ist ein exaktes Duplikat, aber ich sollte erwähnen, dass die Verwendung einer for-Schleife die effizienteste Lösung für die Aufgabe ist. – 4castle

Antwort

5

machen es gerade ein für jedes Array-Element-Schleife zu überprüfen.

var array = ["test234", "test9495", "test234", "test93992", "test234"]; 
 

 
for (i=0;i<array.length;i++) { 
 
    if (array[i] == "test234") { 
 
    document.write(i + "<br>"); 
 
    } 
 
}

+0

Können Sie es als Prototyp machen? –

+0

@MrZ Wenn Sie es zu 'Array hinzufügen.prototype', dann lautet die Antwort ja, aber das ist eine schlechte Übung und es hat einige unerwartete Auswirkungen. Sie müssten jedes Array mit 'new Array()' anstelle von '[]' initialisieren, damit es funktioniert. Sie sind besser dran, nur Dienstprogrammfunktionen zu machen. – 4castle

+0

Sie sollten wirklich '===' anstelle von '==' für diese eine narrensichere Antwort verwenden. [Siehe hierzu] (http://stackoverflow.com/q/359494/5743988) – 4castle

1

können Sie die fromIndex von Array#indexOf verwenden.

fromindex

Der Index bei der Suche zu beginnen. Wenn der Index größer oder gleich der Länge des Arrays ist, wird -1 zurückgegeben, was bedeutet, dass das Array nicht durchsucht wird. Wenn der angegebene Indexwert eine negative Zahl ist, wird er als der Versatz vom Ende des Arrays genommen. Hinweis: Wenn der angegebene Index negativ ist, wird das Array immer noch von vorne nach hinten durchsucht. Wenn der berechnete Index kleiner als 0 ist, wird das gesamte Array durchsucht. Standard: 0 (das gesamte Array wird durchsucht).

~ ist ein bitwise not operator.

Es ist perfekt für den Einsatz mit indexOf(), weil indexOf kehrt gefunden, wenn der Index 0 ... n und wenn nicht -1:

value ~value boolean 
-1 => 0 => false 
0 => -1 => true 
1 => -2 => true 
2 => -3 => true 
and so on 

var array = ["test234", "test9495", "test234", "test93992", "test234"], 
 
    result = [], 
 
    pos = array.indexOf('test234'); 
 

 
while (~pos) { 
 
    result.push(pos); 
 
    pos = array.indexOf('test234', pos + 1); // use old position incremented 
 
} //        ^^^^^^^ 
 

 
document.write('<pre> ' + JSON.stringify(result, 0, 4) + '</pre>');

+0

'~' macht mein Gehirn weh. – 4castle

+0

@ 4castle, siehe edit :) –

+0

Ich weiß genau, was es tut und wie es funktioniert. Ich sage nur, dass es im Allgemeinen verwirrend ist. Ich bevorzuge es, genau zu kodieren, was ich meine, anstatt seltsame Operatoren zu verwenden. Wenn es darauf ankommt, ist unser Code fast identisch. – 4castle

0

Diese Art der Funktion doesn Es ist nicht eingebaut, aber es wäre pret Es ist einfach, es selbst zu machen. Glücklicherweise kann indexOf auch einen Startindex als zweiten Parameter akzeptieren.

function indexOfAll(array, searchItem) { 
 
    var i = array.indexOf(searchItem), 
 
     indexes = []; 
 
    while (i !== -1) { 
 
    indexes.push(i); 
 
    i = array.indexOf(searchItem, ++i); 
 
    } 
 
    return indexes; 
 
} 
 

 
var array = ["test234", "test9495", "test234", "test93992", "test234"]; 
 
document.write(JSON.stringify(indexOfAll(array, "test234")));