Dizinin boş veya boş olup olmadığını kontrol edin


107

JQuery'de bir dizinin boş veya null olup olmadığını nasıl kontrol edeceğimi bilmek istiyorum. Denedim array.length === 0ama işe yaramadı. Herhangi bir hata da yapmadı.

Kod bu:

var album_text = new Array();

$("input[name='album_text[]']").each(function(){
  if( $(this).val() &&  $(this).val() != '') {
    album_text.push($(this).val());
  }
});
if (album_text.length === 0) {
  $('#error_message').html("Error");
}

else {
  // send data
}

2
"Normal JavaScript" ile aynı şekilde: stackoverflow.com/questions/2672380/…
Julien Schmidt

1
@Julien, bu konuya başlamadan önce o başlıkta listelenen tüm çözümleri denedim. Hiçbiri bir şekilde çalışmadı.
girdi

Bağlam için biraz daha kod alabilir miyiz? Çevreleyen JavaScript, HTML? Bunun $("input[name='album_text[]']")gerçekten geri dönen öğeler olduğundan emin misiniz ?
Jon Adams

@JulienSchmidt: Bağlandığınız soru , tüm dizinin değil, bir dizi değerinin boş olup olmadığını kontrol etmektir.
Dan Dascalescu

Yanıtlar:


168

Seçiciniz gerçekten çalıştığı sürece, dizinin uzunluğunu kontrol eden kodunuzda yanlış bir şey görmüyorum. Bu ne istiyorsan yapmalı. Daha basit ve daha okunaklı olması için kodunuzu temizlemenin birçok yolu vardır. İşte temizlediklerimle ilgili notlar içeren temizlenmiş bir sürüm.

var album_text = [];

$("input[name='album_text[]']").each(function() {
    var value = $(this).val();
    if (value) {
        album_text.push(value);
    }
});
if (album_text.length === 0) {
    $('#error_message').html("Error");
}

else {
  //send data
}

Ne yaptığına ve neyi değiştirdiğime dair bazı notlar.

  1. $(this)her zaman geçerli bir jQuery nesnesidir, bu nedenle kontrol etmek için hiçbir neden yoktur if ($(this)). İçinde herhangi bir DOM nesnesi olmayabilir, ancak gerekirse bunu kontrol edebilirsiniz $(this).length, ancak burada gerekli değildir çünkü .each()hiç öğe olmasaydı döngü çalışmayacaktır, böylece $(this)döngünüzün içinde .each()her zaman bir şeyler olacaktır.
  2. $ (This) işlevini aynı işlevde birden çok kez kullanmak verimsizdir. Onu bir kez yerel bir değişkene alıp sonra o yerel değişkenden kullanmak çok daha iyi.
  3. Dizileri []yerine ile başlatmanız önerilir new Array().
  4. if (value)değeri elde edecek hem korumak bir dize olması bekleniyor zaman value == null, value == undefinedve value == ""yapmanız gereken kalmamak if (value && (value != "")). Yapabilirsiniz: if (value)üç boş durumu da kontrol etmek için.
  5. if (album_text.length === 0) dizinin geçerli, başlatılmış bir dizi olduğu sürece (burada olduğu gibi) boş olup olmadığını size söyleyecektir.

Bu seçiciyle ne yapmaya çalışıyorsunuz $("input[name='album_text[]']")?


5
@MaciekSemik - bkz. Stackoverflow.com/questions/359494/… . ===Özellikle bir tür dönüşümüne izin vermek istemediğim sürece her zaman katı eşitlik ( ) kullanırım . Başlamak iyi bir alışkanlıktır.
jfriend00

73

Kullanıcı JQuery, dizinin öğe içerip içermediğini kontrol etmek için EmptyObject'dir.

var testArray=[1,2,3,4,5];
var testArray1=[];
console.log(jQuery.isEmptyObject(testArray)); //false
console.log(jQuery.isEmptyObject(testArray1)); //true

2
Uzunluğu kontrol etmekten çok daha güvenilirdir, özellikle değişkeniniz de bir nesne olabilirse (nesnelerle, uzunluk boş olup olmadığını kontrol etmek için çalışmaz).
2014

Bence bu daha uygun cevap.
earl3s

4
isEmptyObjectHer zaman döner falseeğer Array.prototypeuzatılır örneğin Array.prototype.someFunction = function () {};dizisi boş olsa bile -. Bazı çerçevelerin (örn. Ember.js) varsayılan olarak Dizi prototipini genişlettiğini unutmayın.
jesenko

4
Dikkatli olun isEmptyObject! JQuery 1.8.3 jQuery.isEmptyObject([])iadeleri için false, ancak jQuery 1.11.3 için geri döner true. Aslında, jQuery belgeleri , diğer nesne türleri (DOM öğeleri, ilkel dizeler / sayılar, ana bilgisayar nesneleri) tarayıcılarda tutarlı sonuçlar vermeyebileceğinden, bağımsız değişken her zaman düz bir JavaScript Nesnesi olmalıdır diyor . Üzgünüm, @rhinoxi'nin cevabını görmedim.
Dmitry Vershinin

8

''Dizinize girmeden önce (boş dizeyi) kontrol etmelisiniz . Dizinizde boş dizeler olan öğeler var. O zaman album_text.length === 0iradeniz gayet iyi çalışır.


Lütfen güncellenen koda bakın. Bu kodu ekledim if( $(this).val() && $(this).val() != '') henüz çalışmıyor.
girilir

8

@Jesenko'nun da bahsettiği gibi dizinin boş olup olmadığını kontrol etmek için jquery'den $ .isEmptyObject kullanmanın tehlikeli olduğunu düşünüyorum. Bu problemle yeni tanıştım.

Gelen isEmptyObject doc , bu söz eder:

Argüman her zaman düz bir JavaScript Nesnesi olmalıdır

tarafından belirleyebileceğiniz $.isPlainObject. Dönüşü $.isPlainObject([])yanlıştır.

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.