Javascript'te dizi öğesinin olup olmadığını nasıl kontrol edebilirim?


198

Titanyum ile çalışıyorum, kodum şöyle görünüyor:

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;
}

Diziye bir dizin geçiriyorum currentData. Hala yukarıdaki kodu kullanarak var olmayan bir öğeyi algılayamıyorum.


1
Mantık yanlış. &&Bireysel koşullar arasında bağlaçlara ( ) ihtiyacınız vardır .
JK

Yanıtlar:


382

kullanım typeof arrayName[index] === 'undefined'

yani

if(typeof arrayName[index] === 'undefined') {
    // does not exist
}
else {
    // does exist
}

4
+1, güzel. if(arrayName[index] === 'undefined')Kısayol olarak da kullanabilirsiniz
AnchovyLegend

67
@AnchovyLegend hayır, yapamazsın! Ama kullanabilirsiniz if(arrayName[index] === undefined).
Denis V

18
öğe oradaysa, ancak bu başarısız olur, ancak değeri tanımsızdır; bunun yerine bu cevabı kullan -> stackoverflow.com/questions/1098040/…
Matus

@Matus'un dediği gibi, burada daha fazla açıklama var , farkında olmalısınız.
S.Thiongane

1
eğer if (diziAdı [dizin] === tanımsız), daha kısa bir tane kullanabilirsiniz (eğer! diziAdı [dizin])
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");
}

2
Ne yazık ki, bu IE 7 ve altında çalışmıyor.
darksoulsong

4
Bence bu en iyi cevap, şimdiye kadar IE 7 artık bakımlı değil, bu yüzden bir sorun değil. Üçlü eşitleri kullanmanızı öneririmif(myArray.indexOf(searchTerm) === -1)
Mauro Gava

2
OP verilen dizin numarasının mevcut olup olmadığını görmek istiyordu . Bu, verilen bir değerin olup olmadığını kontrol etmektir .
jonathan.s

6

Birisi yanılıyorsam lütfen beni düzeltin, ama AFAIK aşağıdakiler doğrudur:

  1. Diziler gerçekten sadece JS kaputunun altındaki nesnelerdir
  2. Böylece, prototip yönteminden hasOwnProperty"miras alınan"Object
  3. Testlerimde, hasOwnPropertybir dizi dizininde herhangi bir şey olup olmadığını kontrol edebilir.

Yani, yukarıdakiler doğru olduğu sürece, şunları yapabilirsiniz:

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

kullanımı:

arrayHasIndex([1,2,3,4],4); çıktılar: false

arrayHasIndex([1,2,3,4],2); çıktılar: true


Bu, dizideki tanımlanmamış ve boş değerler için de çalışır; buradaki diğer yanıtların hiçbiri bunu yapmaz.
Jake Thakur

MDN'den doğrulandı: "Bir Nesne Dizi ise, hasOwnProperty yöntemi bir dizin olup olmadığını kontrol edebilir." developer.mozilla.org/tr-TR/docs/Web/JavaScript/Reference/…
Loren

3

Techfoobar'ın cevabını bir try.. catchbloğuna sarmak zorunda kaldım, şöyle :

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

... yine de kromda böyle çalıştı (aksi takdirde kod bir hatayla durdu).


Bu, yalnızca değişkenin arrayNamekendisi (veya index) mevcut değilse bir hata ile "kırılmış" olmalıdır . Sadece tanımlanmamış bir dizi öğesine erişmek bir "hata" ile sonuçlanmamalı mıydı?
MrWhite

3

Dizi öğeleri de basit nesneler veya dizilerse, bazı işlevleri kullanabilirsiniz :

// 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;
    }
});

someburadaki en modern yoldur. Hatta tek bir astar bile olabilirmyArray.some(el => el.item === element.item && el.title === element.title)
vahdet

2

A dizisini göz önünde bulundurun:

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

'Name1' öğesinin a'da olup olmadığını kontrol etmek istiyorsanız, şunu test edin in:

if('name1' in a){
console.log('name1 exists in a')
}else
console.log('name1 is not in a')

5
"var a" sizin durumunuzda bir dizi nesnesi değil, normal bir nesnedir. Var olmalıdır a = [...]. Sanırım yazarın ihtiyacı olan buydu.
tomazahlin

3
Bu, bir dizideki bir dizinin varlığını değil, bir nesnede anahtarın varlığını nasıl kontrol edeceğinizdir.
Ben Hull

2

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


1

Underscore.js kullanıyorsanız, bu tür boş ve tanımsız çekler kütüphane tarafından gizlenir.

Kodunuz şöyle görünecek -

var currentData = new Array();

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

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

return true;

Şimdi çok daha okunabilir görünüyor.


Cevabınız doğru olsa bile, bunun için iki kez düşünürdüm. Kodunuz yalnızca boş bir değeri denetlemek için underscore.js'ye bağımlı olur. Sadece basit bir sarma işlevi yapın isset (v) {return (typeof v! == 'undefined'); }
Heroselohim

1

Var olup olmadığını kontrol etmenin basit yolu

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")

3
korkunç verimsiz. ne ayarlarsam myArray[1000000] = 'Pear'fonksiyonunuz sonsuza kadar sürecektir.
John Henckel

1

Bence bu en kolay yol.

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');
}

Ve belki de bunu yapmanın başka bir yolu.

nameList.forEach(function(ItemList)
 {
   if(ItemList.name == 'item1')
        {
          alert('Item Exist');
        }
 }

1
var demoArray = ['A','B','C','D'];
var ArrayIndexValue = 2;
if(ArrayIndexValue in demoArray){
   //Array index exists
}else{
   //Array Index does not Exists
}

Ne bekliyorsun .. asıl soru nedir?
Geeky

1

Eğer böyle bir şey arıyorsanız.

İşte aşağıdaki snippetr

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
}


Bugün projemde kullanacağım çözüm bu. Neden downvotes olduğunu hiçbir fikrim yok - bu sunucu tarafı node.js / express olan kullanım durumum için en iyi çalışır. Thank you
mkrufky

@mkrufky çünkü bu soru bunun için değil. uzun zamandır Array.includesbir değerin bir dizi olup olmadığını kontrol etme yeteneğine sahiptik demoArray.indexOf(ArrayIndexValue) !== -1. Bu soru dizinin tamamen farklı bir sorun olan dizide olup olmadığını kontrol
etmektir

0

sadece bunu kullanabilirsiniz:

var tmp = ['a', 'b'];
index = 3 ;
if( tmp[index]){
    console.log(tmp[index] + '\n');
}else{
    console.log(' does not exist');
}

3
yanlış. peki o tmp = [0,0,0,0]zaman tmp [3] olmalı
John Henckel

0
(typeof files[1] === undefined)?
            this.props.upload({file: files}):
            this.props.postMultipleUpload({file: files widgetIndex: 0, id})

Dizideki ikinci öğenin tanımlanıp tanımlanmadığını typeofveundefined


0

JS'de bir dizi endeksi olup olmadığını bulmaya çalışırken, bunu yapmanın en kolay ve en kısa yolu çift olumsuzlamadır.

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

0

Bu tam olarak ne inoperatörü içindir. Şöyle kullanın:

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

Kabul edilen cevap yanlış, adresindeki değer şu indexise yanlış negatif verir 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!
}


0
const arr = []

typeof arr[0] // "undefined"

arr[0] // undefined

Boole ifadesi varsa

typeof arr[0] !== typeof undefined

true ise 0 arr içinde bulunur


0

Bu da işe yarar, türe göre test undefined.

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

Ölçek:

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

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.