Bagaimana menemukan indeks array dengan suatu nilai?


Jawaban:


316

Anda bisa menggunakan indexOf:

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

Anda akan mendapatkan -1 jika tidak dapat menemukan nilai dalam array.


2
Anda dapat menggunakan developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… atau kerangka kerja Javascript apa pun untuk memperbaikinya.
voigtan

1
Baru saja menemukannya tidak akan berfungsi di IE8. Apa alternatif saya?
joedborg

@ Voligtan Bagaimana cara menambahkan ini ke JS saya?
joedborg

5
Saya sudah melakukannya, terima kasih. IE suatu hari akan mengejar ketinggalan zaman modern!
joedborg

Juga tidak akan berfungsi di IE terbaru jika dalam mode kompatibilitas
pelms

74

Untuk penggunaan array objekmap dengan 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);


Di browser modern, Anda dapat menggunakan findIndex:

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

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

console.log(index);

Itu bagian dari ES6 dan didukung oleh Chrome, FF, Safari dan Edge


1
Perhatikan bahwa findIndex tidak diterapkan di IE 11
Bindrid

2
@Bindrid ditulis dalam jawaban, lihat "Bagian ES6 dan didukung oleh Chrome, FF, Safari, dan (Sayangnya hanya) tepi IE"
Jaqen H'ghar

17

Gunakan fungsi jQuery, jQuery.inArray

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

Akan menggunakan kode yang ditandai sebagai jawaban yang benar tetapi tampaknya kode itu tidak akan berfungsi di semua versi IE. Jawaban ini berfungsi di semua versi IE tapi saya sedikit mengubah kode: var arrayPosition = $ .inArray (value, Array); berfungsi dengan baik
James Blackburn

6
jQuery ≠ Javascript
Andrew

13

Berikut ini cara lain menemukan indeks nilai dalam array kompleks dalam javascript. Semoga membantu seseorang. Mari kita asumsikan kita memiliki array JavaScript sebagai berikut,

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

Sekarang jika kita memiliki persyaratan untuk memilih objek tertentu dalam array. Mari kita asumsikan bahwa kita ingin menemukan indeks siswa dengan nama Tanmay.

Kita bisa melakukannya dengan mengulangi melalui array dan membandingkan nilai pada kunci yang diberikan.

function functiontofindIndexByKeyValue(arraytosearch, key, valuetosearch) {

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

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

Anda dapat menggunakan fungsi ini untuk menemukan indeks elemen tertentu seperti di bawah ini,

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



6

Array.indexOftidak bekerja di beberapa versi internet explorer - ada banyak cara alternatif untuk melakukannya ... lihat pertanyaan / jawaban ini: Bagaimana cara saya memeriksa apakah array menyertakan objek dalam JavaScript?


menurut halaman ini developer.mozilla.org/en-US/docs/JavaScript/Reference/… Anda memerlukan Internet Explorer 9 untuk fitur ini (saya hampir keliru menganggap kami hanya berbicara dengan IE 6 di sini)
Simon_Weaver

@Simon_Weaver pada halaman yang Anda tautkan ada polyfill untuk semua browser yang menggunakan JavaScript 1.6 dan lebih tinggi
Pastori

5

Ketika daftar tidak terlalu panjang, ini adalah cara terbaik yang saya tahu:

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

Dimungkinkan untuk menggunakan suatu ES6fungsi Array.prototype.findIndex.

MDN mengatakan :

The findIndex()method mengembalikan indeks dari elemen pertama dalam array yang memenuhi disediakan pengujian fungsi. Kalau tidak -1 dikembalikan.

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

// expected output: 1

Temukan indeks berdasarkan properti objek.

Untuk menemukan indeks berdasarkan properti objek:

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

Misalnya, ada array seperti itu:

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

Kemudian, kode untuk menemukan indeks properti yang diperlukan terlihat seperti itu:

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

0

Inilah pendapat saya, sepertinya sebagian besar solusi orang tidak memeriksa apakah item ada dan menghapus nilai acak jika tidak ada.

Pertama periksa apakah elemen ada dengan mencari indeksnya . Jika memang ada, hapus dengan indeks menggunakan metode splice

elementPosition = array.indexOf(value);

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

0

Dalam array multidimensi .


Array referensi:

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

Menggunakan filterdan 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]);

Looping melalui setiap item dalam array menggunakan 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);

Harap Catatan : Termasuk fungsi adalah metode contoh sederhana pada array dan membantu untuk dengan mudah menemukan jika suatu item ada dalam array (termasuk NaN tidak seperti indexOf)


1
Selain ini hanya memberi tahu Anda jika ada, alih-alih mendapatkan indeks / item, sadari kompatibilitasnya (mis. Tidak ada IE): caniuse.com/#search=includes
moto

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.