Bagaimana cara memeriksa apakah elemen array ada atau tidak dalam javascript?

197

Saya bekerja dengan Titanium, kode saya terlihat seperti ini:

var currentData = new Array();

if(currentData[index]!==""||currentData[index]!==null||currentData[index]!=='null')
{
    Ti.API.info("is exists  " + currentData[index]);
    return true;
}
else
{   
    return false;
}

Saya meneruskan indeks ke array currentData. Saya masih tidak dapat mendeteksi elemen yang tidak ada menggunakan kode di atas.

Pradeep
sumber
1
Logika Anda salah. Anda memerlukan konjungsi ( &&) antara kondisi individual.
JK

Jawaban:

380

Menggunakan typeof arrayName[index] === 'undefined'

yaitu

if(typeof arrayName[index] === 'undefined') {
    // does not exist
}
else {
    // does exist
}
techfoobar
sumber
4
+1, bagus. Anda juga dapat menggunakan if(arrayName[index] === 'undefined')sebagai pintasan
AnchovyLegend
67
@AnchovyLegend tidak, Anda tidak bisa! Tapi Anda bisa menggunakannya if(arrayName[index] === undefined).
Denis V
18
ini gagal, jika item ada di sana, tetapi nilainya tidak terdefinisi; gunakan jawaban ini sebagai gantinya -> stackoverflow.com/questions/1098040/…
Matus
seperti @Matus berkata, ada penjelasan lebih lanjut di sini , Anda harus sadar.
S.Thiongane
1
karena if (arrayName [index] === undefined) Anda dapat menggunakan yang lebih pendek yaitu if (! arrayName [index])
Park JongBum
84
var myArray = ["Banana", "Orange", "Apple", "Mango"];

if (myArray.indexOf(searchTerm) === -1) {
  console.log("element doesn't exist");
}
else {
  console.log("element found");
}
yeswanth
sumber
2
Sayangnya, yang ini tidak berfungsi di IE 7 dan di bawah.
darksoulsong
4
Ini menurut saya adalah jawaban terbaik, saat ini IE 7 tidak dipertahankan lagi sehingga tidak menjadi masalah. Meskipun saya akan menyarankan untuk menggunakan triple sama denganif(myArray.indexOf(searchTerm) === -1)
Mauro Gava
2
OP sedang mencari untuk melihat apakah nomor indeks yang diberikan ada. Ini memeriksa apakah ada nilai yang diberikan .
jonathan.s
6

Seseorang tolong perbaiki saya jika saya salah, tetapi AFAIK yang berikut ini benar:

  1. Array benar-benar hanya Objek di bawah tenda JS
  2. Dengan demikian, mereka memiliki metode prototipe hasOwnProperty "yang diwarisi" dariObject
  3. dalam pengujian saya, hasOwnPropertydapat memeriksa apakah ada sesuatu di indeks array.

Jadi, selama hal di atas benar, Anda dapat:

const arrayHasIndex = (array, index) => Array.isArray(array) && array.hasOwnProperty(index);

pemakaian:

arrayHasIndex([1,2,3,4],4); output: false

arrayHasIndex([1,2,3,4],2); output: true

r3wt
sumber
Ini juga berfungsi untuk nilai yang tidak terdefinisi dan nol dalam array, yang tidak dilakukan oleh jawaban lain di sini.
Jake Thakur
Diverifikasi dari MDN: "Jika Objek adalah Array, metode hasOwnProperty dapat memeriksa apakah ada indeks." developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Loren
3

Saya harus memasukkan jawaban techfoobar dalam try.. catchblok, seperti:

try {
  if(typeof arrayName[index] == 'undefined') {
    // does not exist
  }
  else {
  // does exist
  }
} 
catch (error){ /* ignore */ }

... begitulah cara kerjanya di chrome, sih (kalau tidak, kode berhenti dengan kesalahan).

Tuan Swiss
sumber
Seharusnya ini hanya "rusak" dengan kesalahan jika variabel arrayNameitu sendiri (atau index) tidak ada. Cukup mengakses elemen array yang tidak terdefinisi seharusnya tidak menghasilkan "kesalahan"?
MrWhite
3

Jika elemen array juga objek atau array sederhana, Anda dapat menggunakan beberapa fungsi:

// search object
var element = { item:'book', title:'javasrcipt'};

[{ item:'handbook', title:'c++'}, { item:'book', title:'javasrcipt'}].some(function(el){
    if( el.item === element.item && el.title === element.title ){
        return true; 
     } 
});

[['handbook', 'c++'], ['book', 'javasrcipt']].some(function(el){
    if(el[0] == element.item && el[1] == element.title){
        return true;
    }
});
Yaroslav Fedoruk
sumber
someadalah cara paling modern di sekitar sini. Ia bahkan bisa menjadi one-liner sepertimyArray.some(el => el.item === element.item && el.title === element.title)
vahdet
2

Pertimbangkan array:

var a ={'name1':1, 'name2':2}

Jika Anda ingin memeriksa apakah 'name1' ada di a, cukup uji dengan in:

if('name1' in a){
console.log('name1 exists in a')
}else
console.log('name1 is not in a')
Amir
sumber
5
"var a" bukan objek array dalam kasus Anda, tetapi objek biasa. Harus var a = [...]. Saya pikir inilah yang dibutuhkan penulis.
tomazahlin
3
Ini adalah bagaimana memeriksa keberadaan kunci dalam suatu objek, bukan keberadaan indeks dalam array.
Ben Hull
2

var fruits = ["Banana", "Orange", "Apple", "Mango"];
if(fruits.indexOf("Banana") == -1){
    console.log('item not exist')
} else {
	console.log('item exist')
}

Mohammed Jafar
sumber
1

Jika Anda menggunakan underscore.js maka jenis cek nol dan tak terdefinisi ini disembunyikan oleh perpustakaan.

Jadi kode Anda akan terlihat seperti ini -

var currentData = new Array();

if (_.isEmpty(currentData)) return false;

Ti.API.info("is exists  " + currentData[index]);

return true;

Terlihat jauh lebih mudah dibaca sekarang.

Vatsal
sumber
Bahkan jika jawaban Anda benar, saya hanya akan berpikir dua kali untuk ini. Kode Anda akan menjadi tergantung pada underscore.js hanya untuk memeriksa nilai kosong. Cukup lakukan fungsi penerbit wrapper sederhana (v) {return (typeof v! == 'undefined'); }
Heroselohim
1

Cara sederhana untuk memeriksa barang ada atau tidak

Array.prototype.contains = function(obj) {
    var i = this.length;
    while (i--)
       if (this[i] == obj)
       return true;
    return false;
}

var myArray= ["Banana", "Orange", "Apple", "Mango"];

myArray.contains("Apple")
Suhail Ahmed
sumber
3
sangat tidak efisien. bagaimana jika saya mengatur myArray[1000000] = 'Pear'maka fungsi Anda akan memakan waktu selamanya.
John Henckel
1

Cara ini paling mudah menurut saya.

var nameList = new Array('item1','item2','item3','item4');

// Using for loop to loop through each item to check if item exist.

for (var i = 0; i < nameList.length; i++) {
if (nameList[i] === 'item1') 
{   
   alert('Value exist');
}else{
   alert('Value doesn\'t exist');
}

Dan mungkin cara lain untuk melakukannya adalah.

nameList.forEach(function(ItemList)
 {
   if(ItemList.name == 'item1')
        {
          alert('Item Exist');
        }
 }
AmJustSam
sumber
1
var demoArray = ['A','B','C','D'];
var ArrayIndexValue = 2;
if(ArrayIndexValue in demoArray){
   //Array index exists
}else{
   //Array Index does not Exists
}
Vikas Kandari
sumber
Apa yang kamu harapkan .. apa pertanyaannya sebenarnya?
Geeky
1

Jika Anda mencari sesuatu seperti ini.

Berikut ini snippetr berikut

var demoArray = ['A','B','C','D'];
var ArrayIndexValue = 2;
if(demoArray.includes(ArrayIndexValue)){
alert("value exists");
   //Array index exists
}else{
alert("does not exist");
   //Array Index does not Exists
}

Geeky
sumber
Ini adalah solusi yang akan saya gunakan pada proyek saya hari ini. Saya tidak tahu mengapa ada downvotes - ini bekerja paling baik untuk kasus penggunaan saya, yaitu node.js / express sisi server. Terima kasih
mkrufky
@ mkrufky karena bukan itu tujuan pertanyaan ini. kita sudah lama memiliki kemampuan sebelum Array.includesmemeriksa apakah suatu nilai adalah sebuah array demoArray.indexOf(ArrayIndexValue) !== -1. pertanyaan ini adalah tentang memeriksa apakah indeks ada dalam array, yang merupakan masalah yang sama sekali berbeda
r3wt
0

Anda cukup menggunakan ini:

var tmp = ['a', 'b'];
index = 3 ;
if( tmp[index]){
    console.log(tmp[index] + '\n');
}else{
    console.log(' does not exist');
}
Salar
sumber
3
salah. bagaimana jika tmp = [0,0,0,0]kemudian tmp [3] harus ada
John Henckel
0
(typeof files[1] === undefined)?
            this.props.upload({file: files}):
            this.props.postMultipleUpload({file: files widgetIndex: 0, id})

Periksa apakah item kedua dalam array tidak ditentukan menggunakan typeofdan memeriksaundefined

mewc
sumber
0

Ketika mencoba mencari tahu apakah indeks array ada di JS, cara termudah dan terpendek untuk melakukannya adalah melalui negasi ganda.

let a = [];
a[1] = 'foo';
console.log(!!a[0])   // false
console.log(!!a[1])   // true
enchance
sumber
0

Ini persis untuk apa inoperator itu. Gunakan seperti ini:

if (index in currentData) 
{ 
    Ti.API.info(index + " exists: " + currentData[index]);
}

The jawaban yang diterima adalah salah, itu akan memberikan negatif palsu jika nilai di indexadalah undefined:

const currentData = ['a', undefined], index = 1;

if (index in currentData) {
  console.info('exists');
}
// ...vs...
if (typeof currentData[index] !== 'undefined') {
  console.info('exists');
} else {
  console.info('does not exist'); // incorrect!
}

ᆼ ᆺ ᆼ
sumber
0
const arr = []

typeof arr[0] // "undefined"

arr[0] // undefined

Jika ekspresi boolean

typeof arr[0] !== typeof undefined

benar maka 0 terdapat di arr

Larmia
sumber
0

Ini juga berfungsi dengan baik, pengujian berdasarkan jenis terhadap undefined.

if (currentData[index] === undefined){return}

Uji:

const fruits = ["Banana", "Orange", "Apple", "Mango"];

if (fruits["Raspberry"] === undefined){
  console.log("No Raspberry entry in fruits!")
}

NVRM
sumber