Come trovare l'indice di array con un valore?


Risposte:


316

Puoi usare indexOf:

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

Otterrai -1 se non riesce a trovare un valore nella matrice.


2
puoi usare developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… o qualsiasi framework Javascript per risolvere questo problema.
voigtan,

1
Ho appena scoperto che non funzionerà in IE8. Qual è la mia alternativa?
joedborg,

@voigtan Come aggiungo questo al mio JS?
joedborg,

5
L'ho fatto, grazie. Un giorno IE raggiungerà i tempi moderni!
joedborg,

Inoltre non funzionerà in IE recente se in modalità compatibilità
pelms

74

Per gli oggetti array utilizzare mapcon 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);


Nei browser moderni è possibile utilizzare findIndex:

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

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

console.log(index);

Fa parte di ES6 e supportato da Chrome, FF, Safari e Edge


1
Si noti che findIndex non è implementato in IE 11
Bindrid il

2
@Bindrid è scritto nella risposta vedi "
Jaqen H'ghar

17

Utilizzare la funzione jQuery jQuery.inArray

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

Stava per usare il codice contrassegnato come la risposta corretta ma sembra che quel codice non funzionerà in tutte le versioni di IE. Questa risposta funziona in tutte le versioni di IE ma ho modificato leggermente il codice: var arrayPosition = $ .inArray (value, Array); funziona perfettamente
James Blackburn il

6
jQuery ≠ Javascript
Andrew

13

Ecco un altro modo per trovare l'indice di valore in array complessi in javascript. Spero davvero di aiutare qualcuno. Supponiamo di avere un array JavaScript come segue,

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

Ora, se abbiamo un requisito per selezionare un oggetto particolare nella matrice. Supponiamo di voler trovare un indice dello studente con il nome Tanmay.

Possiamo farlo iterando attraverso l'array e confrontando il valore in una determinata chiave.

function functiontofindIndexByKeyValue(arraytosearch, key, valuetosearch) {

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

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

Puoi utilizzare la funzione per trovare l'indice di un particolare elemento come di seguito,

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


7

che ne dici indexOf?

alert(imageList.indexOf(200));

6

Array.indexOfnon funziona in alcune versioni di Internet Explorer - ci sono molti modi alternativi per farlo però ... vedi questa domanda / risposta: Come posso verificare se un array include un oggetto in JavaScript?


secondo questa pagina developer.mozilla.org/en-US/docs/JavaScript/Reference/… hai bisogno di Internet Explorer 9 per questa funzione (ho quasi erroneamente supposto che stessimo parlando di IE 6 qui)
Simon_Weaver

@Simon_Weaver su quella pagina che hai collegato c'è un polyfill per tutti i browser che utilizzano JavaScript 1.6 e
versioni successive

5

Quando le liste non sono estremamente lunghe, questo è il modo migliore che conosco:

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

È possibile utilizzare una ES6funzione Array.prototype.findIndex.

MDN dice :

Il findIndex()metodo restituisce l'indice del primo elemento dell'array che soddisfa la funzione di test fornita. Altrimenti viene restituito -1.

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

// expected output: 1

Trova un indice per proprietà dell'oggetto.

Per trovare un indice per proprietà dell'oggetto:

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

Ad esempio, esiste un tale array:

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

Quindi, il codice per trovare un indice della proprietà necessaria è simile al seguente:

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

0

Ecco la mia opinione su di esso, sembra che la maggior parte delle soluzioni delle persone non controlli se l'articolo esiste e rimuove valori casuali se non esiste.

Prima controlla se l'elemento esiste cercando il suo indice . Se esiste, rimuovilo dal suo indice usando il metodo splice

elementPosition = array.indexOf(value);

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

0

In una matrice multidimensionale .


Matrice di riferimento:

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

Utilizzando filtere 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]);

Scorrendo ciclicamente ogni elemento dell'array usando 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);

Nota : include la funzione è un metodo di istanza semplice sull'array e aiuta a trovare facilmente un elemento nell'array (incluso NaN a differenza di indexOf)


1
In aggiunta a questo ti dico solo se esiste, invece di ottenere l'indice / elemento, sii consapevole della compatibilità (cioè no IE): caniuse.com/#search=includes
moto

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.