Как найти индекс массива со значением?

Скажи, что у меня есть это

imageList = [100,200,300,400,500];

Что дает мне

[0]100 [1]200 и т. Д.

Есть ли способ в JavaScript вернуть индекс со значением?

Т.е. Мне нужен индекс для 200, мне возвращается 1.


person joedborg    schedule 08.09.2011    source источник


Ответы (12)


Вы можете использовать indexOf:

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

Вы получите -1, если он не может найти значение в массиве.

person voigtan    schedule 08.09.2011
comment
вы можете использовать developer.mozilla.org/en/JavaScript/Reference/Global_Objects / или любой другой Javascript-фреймворк, чтобы исправить это. - person voigtan; 08.09.2011
comment
Только что обнаружил, что это не работает в IE8. Какая у меня альтернатива? - person joedborg; 08.09.2011
comment
@voigtan Как мне добавить это в свой JS? - person joedborg; 08.09.2011
comment
Я сделал это, спасибо. IE однажды догонит современность! - person joedborg; 08.09.2011
comment
Также не будет работать в последнем IE, если в режиме совместимости - person pelms; 05.11.2013
comment
var arrayPosition = $ .inArray (значение, массив); будет работать во всех версиях IE - person James Blackburn; 13.12.2013

Для массива объектов используйте map с 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);


В современных браузерах вы можете использовать findIndex :

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

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

console.log(index);

Его часть ES6 и поддерживается Chrome, FF, Safari. и край

person Jaqen H'ghar    schedule 17.05.2016
comment
Обратите внимание, что findIndex не реализован в IE 11. - person Bindrid; 18.12.2017
comment
@Bindrid написано в ответе см. Его часть ES6 и поддерживается Chrome, FF, Safari и (к сожалению, только) IE edge - person Jaqen H'ghar; 18.12.2017

Используйте функцию jQuery jQuery.inArray

jQuery.inArray( value, array [, fromIndex ] )
(or) $.inArray( value, array [, fromIndex ] )
person Simon_Weaver    schedule 10.03.2013
comment
Собирался использовать код, помеченный как правильный ответ, но похоже, что этот код не будет работать во всех версиях IE. Этот ответ работает во всех версиях IE, но я немного изменил код: var arrayPosition = $ .inArray (value, Array); отлично работает - person James Blackburn; 13.12.2013
comment
jQuery ≠ Javascript - person Andrew; 29.12.2015

Вот еще один способ найти индекс значения в сложном массиве в javascript. Надеюсь помочь кому-нибудь действительно. Предположим, у нас есть следующий массив JavaScript:

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

Теперь, если у нас есть требование выбрать конкретный объект в массиве. Предположим, что мы хотим найти индекс студента с именем Танмай.

Мы можем сделать это, перебирая массив и сравнивая значение с заданным ключом.

function functiontofindIndexByKeyValue(arraytosearch, key, valuetosearch) {

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

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

Вы можете использовать функцию для поиска индекса определенного элемента, как показано ниже,

var index = functiontofindIndexByKeyValue(studentsArray, "name", "tanmay");
alert(index);
person Ravinder Singh Bhanwar    schedule 12.08.2015

Используйте indexOf

imageList.indexOf(200)
person TROODON    schedule 08.09.2011

как насчет indexOf?

alert(imageList.indexOf(200));
person gion_13    schedule 08.09.2011

Array.indexOf не работает в некоторых версиях Internet Explorer - но есть много альтернативных способов сделать это ... см. Этот вопрос / ответ: Как проверить, включает ли массив объект в JavaScript?

person Manse    schedule 08.09.2011
comment
согласно этой странице developer.mozilla.org/en- US / docs / JavaScript / Reference / для этой функции вам понадобится Internet Explorer 9 (я почти ошибочно предположил, что здесь речь идет только об IE 6). - person Simon_Weaver; 12.03.2013
comment
@Simon_Weaver на той странице, которую вы связали, есть полифил для всех браузеров, использующих JavaScript 1.6 и выше. - person Manse; 12.03.2013

Когда списки не очень длинные, это лучший способ, который я знаю:

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);
person Ryan    schedule 21.03.2015

Можно использовать ES6 функцию Array.prototype.findIndex.

MDN говорит:

Метод findIndex() возвращает индекс первого элемента в массиве, который удовлетворяет предоставленной функции тестирования. В противном случае возвращается -1.

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

// expected output: 1

Найдите индекс по свойству объекта.

Чтобы найти индекс по свойству объекта:

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

Например, есть такой массив:

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

Тогда код для поиска индекса необходимого свойства выглядит так:

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

В многомерном массиве.


Контрольный массив:

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

Использование filter и indexOf:

var index = array.indexOf(array.filter(function(item) { return item.ID == '200' })[0]);

Переход по каждому элементу в массиве с помощью indexOf:

for (var i = 0; i < array.length; i++) {
    var item = array[i];
    if (item.ID == '200') { 
        var index = array.indexOf(item);
    }
}
person Souleste    schedule 17.02.2020

Вот мой взгляд на это, похоже, что большинство решений для людей не проверяют, существует ли элемент, и удаляют случайные значения, если он не существует.

Сначала проверьте, существует ли элемент, по его индексу. Если он существует, удалите его по индексу с помощью метода splice.

elementPosition = array.indexOf(value);

if(elementPosition != -1) {
  array.splice(elementPosition, 1);
}
person ricks    schedule 24.09.2018

// Instead Of 
var index = arr.indexOf(200)

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

Обратите внимание: функция Includes - это простой метод экземпляра в массиве, который помогает легко определить, находится ли элемент в массиве (включая NaN, в отличие от indexOf).

person Harshi Srivastava    schedule 10.04.2018
comment
В дополнение к этому, только сообщая вам, существует ли он, вместо получения индекса / элемента, помните о совместимости (т.е. без IE): caniuse.com/#search=includes - person moto; 07.09.2019