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.

voigtan
źródło
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

Jaqen H'ghar
źródło
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 ] )
Simon_Weaver
źródło
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);
Ravinder Singh Bhanwar
źródło
9

Użyj indexOf

imageList.indexOf(200)
TROODON
źródło
7

jak o indexOf?

alert(imageList.indexOf(200));
gion_13
źródło
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?

Manse
źródło
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);
Ryan
źródło
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');
StepUp
źródło
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);
}
ricks
źródło
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);
    }
}
Souleste
źródło
-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)

Harshi Srivastava
źródło
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