2012-01-14 2 views

ответ

34

Рассмотрите возможность использования indexOf, он возвращает положение элемента в массиве на основе 0.

например.

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

Обратите внимание, что этот метод недоступен в IE 8 и ниже.

+2

Если массив был [1, 2, 3, 4, 3], как бы вы получили позицию обоих 3s на две разные переменные? – CPC

+0

Для справки вы можете использовать метод Array.reduce для возврата массива, содержащего позицию нескольких элементов. Следующий код возвращает массив позиций [2,4] - положение обоих 3s. var array = [1, 2, 3, 4, 3] .reduce (function (array, n, i) {if (n === 3) array.push (i); return array;}, []); – RepeatQuotations

2

Или просто использовать для цикла:

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 обеспечивает YOUT с функциональностью "inArray", похожий на PHP:

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

Если вы уже используете JQuery в проекте, это был бы путь! jQuery использует indexOf (самое быстрое решение), если это возможно, и возвращается к решению на основе цикла, если нет.

0

Как уже было отмечено некоторыми ответами, массивы в новых браузерах есть такие методы, как indexOfmap и forEach, которые очень удобны для избегая писать много для петель.

Если вам нужно поддерживать старые среды без этих функций, я бы настоятельно рекомендовал использовать библиотеку (или написать свой собственный) для реализации этих очень распространенных операций с массивами (вроде того, как предложил софт).

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); 

Самые популярные фреймворки JS уже должны иметь большинство из этих встроенных систем. Из глубины души я помню Dojo, например jQuery и Underscore, некоторые из этих функций.

Смежные вопросы