Jak znaleźć indeks tablicy z wartością?


Odpowiedzi:


316

Możesz użyć indexOf:

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

Otrzymasz -1, jeśli nie może znaleźć wartości w tablicy.


2
możesz to naprawić za pomocą developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… lub dowolnej struktury JavaScript.
voigtan

1
Właśnie odkryłem, że nie będzie działać w IE8. Jaka jest moja alternatywa?
joedborg

@voigtan Jak dodać to do mojego JS?
joedborg

5
Zrobiłem to, dzięki. IE pewnego dnia dogoni współczesność!
joedborg

Również nie będzie działać w najnowszej IE, jeśli jest w trybie zgodności
pelms

74

W przypadku tablicy obiektów używaj mapz 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);


W nowoczesnych przeglądarkach możesz używać findIndex:

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

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

console.log(index);

Jest to część ES6 i obsługiwana przez Chrome, FF, Safari i Edge


1
Zauważ, że findIndex nie jest zaimplementowany w IE 11
Bindrid

2
@ Bindrid jest napisane w odpowiedzi patrz „Jego część ES6 i obsługiwana przez Chrome, FF, Safari i (niestety tylko) IE edge”
Jaqen H'ghar

17

Użyj funkcji jQuery jQuery.inArray

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

Zamierzałem użyć kodu oznaczonego jako poprawna odpowiedź, ale wygląda na to, że kod ten nie zadziała we wszystkich wersjach IE. Ta odpowiedź działa we wszystkich wersjach IE, ale zmieniłem nieco kod: var arrayPosition = $ .inArray (wartość, Array); działa doskonale
James Blackburn,

6
jQuery ≠ Javascript
Andrew

13

Oto inny sposób znalezienia indeksu wartości w złożonej tablicy w javascript. Mam nadzieję, że naprawdę ktoś pomoże. Załóżmy, że mamy tablicę JavaScript w następujący sposób,

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

Teraz, jeśli mamy wymóg wyboru konkretnego obiektu w tablicy. Załóżmy, że chcemy znaleźć indeks studenta o nazwisku Tanmay.

Możemy to zrobić, iterując tablicę i porównując wartość pod danym kluczem.

function functiontofindIndexByKeyValue(arraytosearch, key, valuetosearch) {

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

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

Możesz użyć tej funkcji do znalezienia indeksu określonego elementu, jak poniżej,

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



6

Array.indexOfnie działa w niektórych wersjach Internet Explorera - istnieje wiele alternatywnych sposobów na zrobienie tego ... zobacz to pytanie / odpowiedź: Jak sprawdzić, czy tablica zawiera obiekt w JavaScript?


według tej strony developer.mozilla.org/en-US/docs/JavaScript/Reference/ ... do tej funkcji potrzebujesz Internet Explorera 9 (prawie błędnie założyłem, że mówimy tutaj o IE 6)
Simon_Weaver

@Simon_Weaver na tej stronie, do której linkujesz, znajduje się wypełnienie dla wszystkich przeglądarek korzystających z JavaScript 1.6 i nowszych
Manse

5

Kiedy listy nie są wyjątkowo długie, jest to najlepszy sposób, jaki znam:

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

Możliwe jest użycie ES6funkcji Array.prototype.findIndex.

MDN mówi :

findIndex()Sposób powraca indeks pierwszego elementu w układzie, który spełnia podaną funkcję testowania. W przeciwnym razie zwracane jest -1.

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

// expected output: 1

Znajdź indeks według właściwości obiektu.

Aby znaleźć indeks według właściwości obiektu:

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

Na przykład istnieje taka tablica:

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

Następnie kod znajdujący indeks niezbędnej właściwości wygląda następująco:

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

0

Oto moje zdanie, wygląda na to, że większość ludzi nie sprawdza, czy element istnieje, i usuwa losowe wartości, jeśli nie istnieje.

Najpierw sprawdź, czy element istnieje, szukając jego indeksu . Jeśli istnieje, usuń go według indeksu, używając metody łączenia

elementPosition = array.indexOf(value);

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

0

W tablicy wielowymiarowej .


Tablica referencyjna:

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

Korzystanie filteri 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]);

Pętle przez każdy element w tablicy za pomocą 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);

Uwaga : Funkcja „Obejmuje” jest prostą metodą instancji w tablicy i pomaga łatwo sprawdzić, czy element znajduje się w tablicy (w tym NaN w przeciwieństwie do indexOf)


1
Oprócz tego informując tylko, czy istnieje, zamiast uzyskać indeks / element, bądź świadomy zgodności (tj. Bez IE): caniuse.com/#search=includes
moto

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.