Wie finde ich den Array-Index mit einem Wert?

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.

voigtan
quelle
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

Jaqen H'ghar
quelle
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 ] )
Simon_Weaver
quelle
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);
Ravinder Singh Bhanwar
quelle
9

Verwenden Sie indexOf

imageList.indexOf(200)
TROODON
quelle
7

wie wäre es indexOf?

alert(imageList.indexOf(200));
gion_13
quelle
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?

Pfarrhaus
quelle
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);
Ryan
quelle
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');
StepUp
quelle
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);
}
Ricks
quelle
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);
    }
}
Souleste
quelle
-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).

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