Comment trouver l'index du tableau avec une valeur?


Réponses:


316

Vous pouvez utiliser indexOf:

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

Vous obtiendrez -1 s'il ne trouve pas de valeur dans le tableau.


2
vous pouvez utiliser developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… ou tout autre framework Javascript pour résoudre ce problème.
voigtan

1
Je viens de découvrir que cela ne fonctionnera pas dans IE8. Quelle est mon alternative?
joedborg

@voigtan Comment ajouter ceci à mon JS?
joedborg

5
Je l'ai fait, merci. IE rattrapera un jour les temps modernes!
joedborg le

Ne fonctionnera pas non plus dans IE récent si en mode de compatibilité
pelms

74

Pour le tableau d'objets, utilisez mapavec 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);


Dans les navigateurs modernes, vous pouvez utiliser findIndex :

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

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

console.log(index);

Sa partie de ES6 et prise en charge par Chrome, FF, Safari et Edge


1
Notez que findIndex n'est pas implémenté dans IE 11
Bindrid

2
@Bindrid, il est écrit dans la réponse, voir "Sa partie d'ES6 et prise en charge par Chrome, FF, Safari et (malheureusement seulement) IE edge"
Jaqen H'ghar

17

Utilisez la fonction jQuery.inArray de jQuery

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

J'allais utiliser le code marqué comme la bonne réponse, mais il semble que ce code ne fonctionnera pas dans toutes les versions d'IE. Cette réponse fonctionne dans toutes les versions d'IE mais j'ai légèrement changé le code: var arrayPosition = $ .inArray (value, Array); fonctionne parfaitement
James Blackburn

6
jQuery ≠ Javascript
Andrew

13

Voici une autre façon de trouver un indice de valeur dans un tableau complexe en javascript. J'espère vraiment aider quelqu'un. Supposons que nous ayons un tableau JavaScript comme suit,

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

Maintenant, si nous avons besoin de sélectionner un objet particulier dans le tableau. Supposons que nous voulons trouver l'index des étudiants avec le nom Tanmay.

Nous pouvons le faire en parcourant le tableau et en comparant la valeur à la clé donnée.

function functiontofindIndexByKeyValue(arraytosearch, key, valuetosearch) {

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

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

Vous pouvez utiliser la fonction pour trouver l'index d'un élément particulier comme ci-dessous,

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


7

que diriez-vous indexOf?

alert(imageList.indexOf(200));

6

Array.indexOfne fonctionne pas dans certaines versions d'Internet Explorer - il existe cependant de nombreuses autres façons de le faire ... voir cette question / réponse: Comment puis-je vérifier si un tableau comprend un objet en JavaScript?


selon cette page developer.mozilla.org/en-US/docs/JavaScript/Reference/… vous avez besoin d'Internet Explorer 9 pour cette fonctionnalité (j'ai supposé presque à tort que nous parlions juste d'IE 6 ici)
Simon_Weaver

@Simon_Weaver sur la page que vous avez liée, il existe un polyfill pour tous les navigateurs utilisant JavaScript 1.6 et plus
Manse

5

Lorsque les listes ne sont pas extrêmement longues, c'est le meilleur moyen que je connaisse:

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

Il est possible d'utiliser une ES6fonctionArray.prototype.findIndex .

MDN dit :

La findIndex()méthode renvoie l'index du premier élément du tableau qui satisfait la fonction de test fournie. Sinon, -1 est renvoyé.

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

// expected output: 1

Recherchez un index par propriété d'objet.

Pour rechercher un index par propriété d'objet:

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

Par exemple, il existe un tel tableau:

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

Ensuite, le code pour trouver un index des propriétés nécessaires ressemble à ceci:

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

0

Voici mon point de vue, il semble que la plupart des solutions ne vérifient pas si l'élément existe et qu'il supprime les valeurs aléatoires s'il n'existe pas.

Vérifiez d'abord si l'élément existe en recherchant son index . S'il existe, supprimez-le par son index à l'aide de la méthode d' épissage

elementPosition = array.indexOf(value);

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

0

Dans un tableau multidimensionnel .


Tableau de référence:

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

Utilisation de filteret 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]);

Faire une boucle sur chaque élément du tableau à l'aide de 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);

Veuillez noter : la fonction comprend est une méthode d'instance simple sur le tableau et aide à trouver facilement si un élément est dans le tableau (y compris NaN contrairement à indexOf)


1
En plus de cela, vous dire seulement s'il existe, au lieu d'obtenir l'index / l'élément, soyez conscient de la compatibilité (c'est-à-dire pas d'IE): caniuse.com/#search=includes
moto

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.