¿Cómo encontrar el índice de matriz con un valor?

Respuestas:

316

Puedes usar indexOf:

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

Obtendrá -1 si no puede encontrar un valor en la matriz.

Voigtan
fuente
2
puede usar developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… o cualquier marco de Javascript para solucionarlo.
voigtan
1
Acabo de descubrir que no funcionará en IE8. Cual es mi alternativa
joedborg
@voigtan ¿Cómo agrego esto a mi JS?
joedborg
55
Lo he hecho, gracias. ¡IE algún día se pondrá al día con los tiempos modernos!
joedborg
Tampoco funcionará en IE reciente si está en modo de compatibilidad
pelms
74

Para la matriz de objetos, use 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);


En los navegadores modernos puede usar 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 parte de ES6 y es compatible con Chrome, FF, Safari y Edge

Jaqen H'ghar
fuente
1
Tenga en cuenta que findIndex no está implementado en IE 11
Bindrid
2
@Bindrid está escrito en la respuesta, vea "Es parte de ES6 y es compatible con Chrome, FF, Safari y (lamentablemente solo) IE edge"
Jaqen H'ghar
17

Utilice la función de jQuery jQuery.inArray

jQuery.inArray( value, array [, fromIndex ] )
(or) $.inArray( value, array [, fromIndex ] )
Simon_Weaver
fuente
Iba a usar el código marcado como la respuesta correcta, pero parece que ese código no funcionará en todas las versiones de IE. Esta respuesta funciona en todas las versiones de IE, pero cambié ligeramente el código: var arrayPosition = $ .inArray (value, Array); funciona perfectamente
James Blackburn
66
jQuery ≠ Javascript
Andrew
13

Aquí hay otra forma de encontrar el índice de valor en una matriz compleja en javascript. Espero ayudar a alguien de hecho. Supongamos que tenemos una matriz de JavaScript de la siguiente manera,

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

Ahora si tenemos el requisito de seleccionar un objeto particular en la matriz. Supongamos que queremos encontrar un índice de estudiante con el nombre Tanmay.

Podemos hacerlo iterando a través de la matriz y comparando el valor en la clave dada.

function functiontofindIndexByKeyValue(arraytosearch, key, valuetosearch) {

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

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

Puede usar la función para encontrar el índice de un elemento particular como se muestra a continuación

var index = functiontofindIndexByKeyValue(studentsArray, "name", "tanmay");
alert(index);
Ravinder Singh Bhanwar
fuente
9

Use indexOf

imageList.indexOf(200)
TROODON
fuente
7

¿qué tal indexOf?

alert(imageList.indexOf(200));
gion_13
fuente
6

Array.indexOfno funciona en algunas versiones de Internet Explorer, aunque hay muchas formas alternativas de hacerlo ... vea esta pregunta / respuesta: ¿Cómo verifico si una matriz incluye un objeto en JavaScript?

Casa del pastor
fuente
de acuerdo con esta página developer.mozilla.org/en-US/docs/JavaScript/Reference/… necesita Internet Explorer 9 para esta función (asumí casi erróneamente que solo estábamos hablando de IE 6 aquí)
Simon_Weaver
@Simon_Weaver en esa página que vinculó hay un polyfill para todos los navegadores que usan JavaScript 1.6 y superior
Manse
5

Cuando las listas no son extremadamente largas, esta es la mejor manera que sé:

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
fuente
5

Es posible usar una ES6funciónArray.prototype.findIndex .

MDN dice :

El findIndex()método devuelve el índice del primer elemento en la matriz que satisface la función de prueba proporcionada. De lo contrario, se devuelve -1.

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

// expected output: 1

Encuentre un índice por propiedad de objeto.

Para buscar un índice por propiedad de objeto:

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

Por ejemplo, hay una matriz de este tipo:

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

Luego, el código para encontrar un índice de propiedad necesaria se ve así:

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

Aquí está mi opinión sobre esto, parece que la mayoría de las soluciones de la gente no comprueban si el elemento existe y elimina valores aleatorios si no existe.

Primero verifique si el elemento existe buscando su índice . Si existe, elimínelo por su índice utilizando el método de empalme

elementPosition = array.indexOf(value);

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

En una matriz multidimensional .


Matriz de referencia:

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

Usando filtery 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]);

Recorriendo cada elemento de la matriz usando indexOf:

for (var i = 0; i < array.length; i++) {
    var item= array[i];
    if (item.ID == '200') { 
        var index = array.indexOf(item);
    }
}
Souleste
fuente
-1
// Instead Of 
var index = arr.indexOf(200)

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

Tenga en cuenta : la función Incluye es un método de instancia simple en la matriz y ayuda a encontrar fácilmente si un elemento está en la matriz (incluido NaN a diferencia de indexOf)

Harshi Srivastava
fuente
1
Además de esto, solo le indicará si existe, en lugar de obtener el índice / elemento, tenga en cuenta la compatibilidad (es decir, no IE): caniuse.com/#search=includes
moto