CSS, HTML und Javascript mit {stil}

Javascript array.indexOf

array indexOf

indexOf() sucht in einem Array nach einem bestimmten Element und gibt die erste Fundstelle als Position des Elements oder -1 zurück.

Die indexOf-Methode für Arrays gehört zur ECMAScript 5-Spezifikation und wird von IE8 noch nicht unterstützt.

    gesuchtes Element  ----+
                           | 
var pos = myarr.indexOf(search, start);
                                  |
            suchen ab Position ---+

Der zweite Parameter start ist optional und bestimmt die Position im Array, ab der gesucht wird.

var elements = ["Yttrium", "Vanadium", "Radium", "Argon"];
var position = elements.indexOf("Vanadium");
console.log ("position " + position + " " + elements[position]);
position 1 Vanadium

Mit indexOf durchsucht Javascript z.B. einen String anhand eines Arrays von Begriffen (die auch von mehreren Wörtern gebildet sein dürfen).

Dieses Beispiel sucht nach typischen Spammer-Begriffen bei der Eingabe in die textarea eines Kontaktformulars.

var bad = ["minocycline","Orders shipped by","Life Insurance"];
var text = document.querySelector("#textfield").value;

function searchInArray (str, badwords) {
  var words = "";
  var numwords = 0; 
  for (var i=0; i<badwords.length; i++) {
    if (str.indexOf(badwords[i]) >= 0) {
      numwords++;
      words +=  badwords[i] + ", ";
    }
  }
  return [numwords, words];
}

var foundspam = searchInArray (text, bad);

Alle modernen Browser, IE9.

In jQuery gibt es äquivalent jQuery.inArray( value, array [, fromIndex ] )

indexOf bei Objekten in Arrays

Die Methode indexOf arbeitet mit strikter Gleichheit (===) bei der Feststellung, ob das Element vorhanden ist. Das ist kein Problem, solange es sind um einfache Datentypen wie Strings und Zahlen handelt. Wenn indexOf allerdings nach einem Objekt in einem Array sucht, wird es schon etwas komplizierter.

var vhskurse = [
    { name: "Nähkurs Einsteiger",
      start: "17.4.2017" },
    { name: "WordPress Fortgeschrittene",
      start: "18.4.2017" }
];

var searchfor = vhskurse.indexOf({
    name: "Nähkurs Einsteiger",
    city: "17.4.2017"
});

console.log(searchfor); // gibt -1 zurück

Die beiden Objekte haben zwar dieselben Eigenschaften und Werte, aber solange sie nicht exakt dieselben Objekte sind, sind sie nicht gleich.

Um mit indexOf einen Match auf ein Objekt oder ein Array zu erzielen, braucht indexOf eine Referenz auf die Instanz des originalen Objekts.

var naehkurs = {
    name: "Nähkurs Einsteiger",
    start: "17.4.2017"
};

var wordKurs = {
    name: "WordPress Fortgeschrittene",
    start: "18.4.2017"
};

var vhskurse = [naehkurs, wordKurs];
var search = vhskurse.indexOf(naehkurs);

array lastIndexOf

Durchsucht das Array von einem Startindex an rückwärts (nach vorn). Gibt die erste Fundstelle oder -1 (nicht gefunden) zurück.

array.lastIndexOf(elem [, from ]);

Die Suche beginnt beim optionalen Index from oder beim letzten Element.

var nums = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 47 ];
console.log ("nums.lastIndexOf(29) " + nums.lastIndexOf(29));
console.log ("nums.lastIndexOf(41,4) " + nums.lastIndexOf(41,4));
console.log ("nums.lastIndexOf(8) " + nums.lastIndexOf(8));
[Log] nums.lastIndexOf(29) 9 
[Log] nums.lastIndexOf(41,4) -1
[Log] nums.lastIndexOf(8) -1

Array includes()

includes() stellt fest, ob das Array ein bestimmtes Element enthält. Wenn ja, gibt includes() true zurück und false sonst.

Alle modernen Browser, Microsoft ab Edge.