2012-01-14 14 views

Respuesta

34

considere usar indexOf, devuelve la posición 0 del elemento en la matriz.

p. Ej.

[1,2,3,4].indexOf(3); // produces 2 

Tenga en cuenta que este método no está disponible en IE 8 y versiones posteriores.

+2

Si la matriz era [1, 2, 3, 4, 3], ¿cómo obtendría la posición de ambos 3 en dos variables diferentes? – CPC

+0

Como referencia, puede usar el método Array.reduce para devolver una matriz que contenga la posición de varios elementos. El siguiente código devuelve una matriz de posición [2,4] - la posición de ambos 3s. var array = [1, 2, 3, 4, 3] .reduce (function (array, n, i) {if (n === 3) array.push (i); return array;}, []); – RepeatQuotations

2

O sencillo utilizar un bucle:

function getPosition(elementToFind, arrayElements) { 
    var i; 
    for (i = 0; i < arrayElements.length; i += 1) { 
     if (arrayElements[i] === elementToFind) { 
      return i; 
     } 
    } 
    return null; //not found 
} 

getPosition(3, [1, 2, 3, 4]); 
4

jQuery proporciona yout con una funcionalidad "InArray", similar a PHP:

var a = [1,2,3,4]; 
console.log(jQuery.inArray(3, a)); //returns 2 

Si ya está usando jQuery en su proyecto, este sería el camino a seguir! jQuery usa indexOf (la solución más rápida) si es posible y los pasos atrás a una solución basada en bucle si no es así.

0

Como ya fue señalado por algunas respuestas, las matrices en los nuevos navegadores tienen métodos como indexOfmap y forEach que son muy conveniente para evitar que escriben un montón de fines de bucles.

Si necesita admitir entornos antiguos sin estas funciones, recomendaría utilizando una biblioteca (o escribiendo una propia) para implementar esas operaciones de matriz muy comunes (tipo de cómo sugirió soc).

var arrayfn = (function(){ 
    var M = {}; 

    M.indexOf = function(array, item){ ... }; 

    M.contains = function(array, item){ return M.indefOf(array, item) !== -1; }; 

    M.map = function(array, callback){ ... }; 
}()); 

arrayfn.contains([1,2,3], 2); 

Los frameworks JS más populares ya deberían tener la mayoría de estos incorporados de todos modos. Por encima de mi cabeza, recuerdo que Dojo, jQuery y Underscore tienen algunas de estas funciones, por ejemplo.

Cuestiones relacionadas