Wie finde ich den Array-Index mit einem Wert?


199

Sagen wir, ich habe das

imageList = [100,200,300,400,500];

Welches gibt mir

[0]100 [1]200 etc.

Gibt es in JavaScript eine Möglichkeit, den Index mit dem Wert zurückzugeben?

Dh ich möchte den Index für 200 , ich bekomme 1 zurückgegeben .


5
Ausgezeichnete Antwort hier -> stackoverflow.com/questions/237104/…
Manse

Antworten:


316

Sie können verwenden indexOf:

var imageList = [100,200,300,400,500];
var index = imageList.indexOf(200); // 1

Sie erhalten -1, wenn im Array kein Wert gefunden werden kann.


2
Sie können developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… oder ein beliebiges Javascript-Framework verwenden, um dies zu beheben.
Voigtan

1
Habe gerade festgestellt, dass es in IE8 nicht funktioniert. Was ist meine Alternative?
Joedborg

@voigtan Wie füge ich das meinem JS hinzu?
Joedborg

5
Ich habe es geschafft, danke. IE wird eines Tages die moderne Zeit einholen!
Joedborg

Funktioniert auch nicht im letzten IE, wenn im Kompatibilitätsmodus
Pelms

74

Für Objekte Array verwenden mapmit indexOf:

var imageList = [
   {value: 100},
   {value: 200},
   {value: 300},
   {value: 400},
   {value: 500}
];

var index = imageList.map(function (img) { return img.value; }).indexOf(200);

console.log(index);


In modernen Browsern können Sie Folgendes verwenden findIndex:

var imageList = [
   {value: 100},
   {value: 200},
   {value: 300},
   {value: 400},
   {value: 500}
];

var index = imageList.findIndex(img => img.value === 200);

console.log(index);

Es ist Teil von ES6 und wird von Chrome, FF, Safari und Edge unterstützt


1
Beachten Sie, dass findIndex nicht in IE 11
Bindrid

2
@Bindrid es ist in der Antwort geschrieben, siehe "Sein Teil von ES6 und unterstützt von Chrome, FF, Safari und (leider nur) IE Edge"
Jaqen H'ghar

17

Verwenden Sie die Funktion jQuery.inArray von jQuery

jQuery.inArray( value, array [, fromIndex ] )
(or) $.inArray( value, array [, fromIndex ] )

Ich wollte den als richtige Antwort gekennzeichneten Code verwenden, aber es scheint, dass dieser Code nicht in allen Versionen des IE funktioniert. Diese Antwort funktioniert in allen IE-Versionen, aber ich habe den Code geringfügig geändert: var arrayPosition = $ .inArray (value, Array); funktioniert perfekt
James Blackburn

6
jQuery ≠ Javascript
Andrew

13

Hier ist eine andere Möglichkeit, den Wertindex in einem komplexen Array in Javascript zu finden. Hoffe jemandem in der Tat zu helfen. Nehmen wir an, wir haben ein JavaScript-Array wie folgt:

var studentsArray =
     [
    {
    "rollnumber": 1,
    "name": "dj",
    "subject": "physics"
   },
   {
   "rollnumber": 2,
  "name": "tanmay",
  "subject": "biology"
   },
  {
   "rollnumber": 3,
   "name": "amit",
   "subject": "chemistry"
   },
  ];

Wenn wir nun ein bestimmtes Objekt im Array auswählen müssen. Nehmen wir an, wir möchten einen Index des Schülers mit dem Namen Tanmay finden.

Wir können dies tun, indem wir das Array durchlaufen und den Wert am angegebenen Schlüssel vergleichen.

function functiontofindIndexByKeyValue(arraytosearch, key, valuetosearch) {

    for (var i = 0; i < arraytosearch.length; i++) {

    if (arraytosearch[i][key] == valuetosearch) {
    return i;
    }
    }
    return null;
    }

Sie können die Funktion verwenden, um den Index eines bestimmten Elements wie folgt zu finden:

var index = functiontofindIndexByKeyValue(studentsArray, "name", "tanmay");
alert(index);


7

wie wäre es indexOf?

alert(imageList.indexOf(200));

6

Array.indexOffunktioniert in einigen Versionen des Internet Explorers nicht - es gibt jedoch viele alternative Möglichkeiten ... siehe diese Frage / Antwort: Wie überprüfe ich, ob ein Array ein Objekt in JavaScript enthält?


Laut dieser Seite developer.mozilla.org/en-US/docs/JavaScript/Reference/… benötigen Sie Internet Explorer 9 für diese Funktion (ich habe fast fälschlicherweise angenommen, dass wir hier nur über IE 6 gesprochen haben)
Simon_Weaver

@ Simon_Weaver auf der Seite, die Sie verlinkt haben, gibt es eine Polyfüllung für alle Browser, die JavaScript 1.6 und höher verwenden
Manse

5

Wenn die Listen nicht extrem lang sind, ist dies der beste Weg, den ich kenne:

function getIndex(val) {
    for (var i = 0; i < imageList.length; i++) {
        if (imageList[i] === val) {
            return i;
        }
    }
}

var imageList = [100, 200, 300, 400, 500];
var index = getIndex(200);

5

Es ist möglich, eine ES6Funktion zu verwenden Array.prototype.findIndex.

MDN sagt :

Die findIndex()Methode gibt den Index des ersten Elements im Array zurück, das die bereitgestellte Testfunktion erfüllt. Andernfalls wird -1 zurückgegeben.

var fooArray = [5, 10, 15, 20, 25];
console.log(fooArray.findIndex(num=> { return num > 5; }));

// expected output: 1

Suchen Sie einen Index nach Objekteigenschaft.

So finden Sie einen Index nach Objekteigenschaft:

yourArray.findIndex(obj => obj['propertyName'] === yourValue)

Zum Beispiel gibt es ein solches Array:

let someArray = [
    { property: 'OutDate' },
    { property: 'BeginDate'},
    { property: 'CarNumber' },
    { property: 'FirstName'}
];

Dann sieht der Code zum Finden eines Index der erforderlichen Eigenschaften folgendermaßen aus:

let carIndex = someArray.findIndex( filterCarObj=> 
    filterCarObj['property'] === 'CarNumber');

0

Hier ist meine Sichtweise, anscheinend überprüfen die meisten Lösungen nicht, ob das Element vorhanden ist, und es entfernt zufällige Werte, wenn es nicht vorhanden ist.

Überprüfen Sie zunächst, ob das Element vorhanden ist, indem Sie nach seinem Index suchen . Wenn es nicht vorhanden ist , zu entfernen , indem es seinen Index unter Verwendung des Spleiß - Verfahren

elementPosition = array.indexOf(value);

if(elementPosition != -1) {
  array.splice(elementPosition, 1);
}

0

In einem mehrdimensionalen Array .


Referenzarray:

var array = [
    { ID: '100', },
    { ID: '200', },
    { ID: '300', },
    { ID: '400', },
    { ID: '500', }
];

Verwenden von filterund indexOf:

var in_array = array.filter(function(item) { 
    return item.ID == '200' // look for the item where ID is equal to value
});
var index = array.indexOf(in_array[0]);

Durchlaufen jedes Elements im Array mit indexOf:

for (var i = 0; i < array.length; i++) {
    var item= array[i];
    if (item.ID == '200') { 
        var index = array.indexOf(item);
    }
}

-1
// Instead Of 
var index = arr.indexOf(200)

// Use 
var index = arr.includes(200);

Bitte beachten Sie : Die Includes-Funktion ist eine einfache Instanzmethode für das Array und hilft dabei, leicht zu finden, ob sich ein Element im Array befindet (einschließlich NaN im Gegensatz zu indexOf).


1
Darüber hinaus sollten Sie nur wissen, ob es vorhanden ist, anstatt den Index / das Element abzurufen
moto

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.