2011-08-25 160 views
83

我想知道如何在jQuery中檢查數組是否爲空或空值。我試過array.length === 0,但沒有奏效。它也沒有拋出任何錯誤。檢查數組是空還是空

這是代碼:推到您的陣列之前

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

相同的方式,在 「常規的JavaScript」: HTTP://計算器。com/questions/2672380/how-do-i-check-if-a-javascript-array-value-is-empty-null- –

+1

@Julien,我在啓動該線程之前嘗試了所有列在該線程中的解決方案。他們沒有一個以某種方式工作。 – input

+0

我們能否獲得更多的上下文代碼?圍繞JavaScript,HTML?你確定'$(「input [name ='album_text []']」)'實際上是返回元素嗎? –

回答

123

只要你的選擇是否正在工作,我什麼也看不到你的代碼錯誤,檢查數組的長度。這應該做你想做的。有很多方法可以清理代碼,使其更簡單,更易讀。這是一個清理版本,裏面有關於我清理過的東西的說明。

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 
} 

什麼,你在做什麼,我改變了一些注意事項。

  1. $(this)始終是一個有效的jQuery對象,所以沒有理由檢查if ($(this))。它可能不是在它裏面的任何DOM對象,但你可以檢查與$(this).length如果你需要,但是這是沒有必要的,因爲在這裏,如果沒有這樣的項目裏面$(this).each()循環將永遠是.each()循環將無法運行一些東西。
  2. 在同一個函數中多次使用$(this)效率不高。最好將它一次寫入局部變量,然後從該局部變量中使用它。
  3. 它的建議與[]而不是new Array()初始化數組。
  4. if (value)當值預計將是一個字符串都將保護value == nullvalue == undefinedvalue == "",這樣你就不必做if (value && (value != ""))。你可以這樣做:if (value)檢查所有三個空的條件。
  5. if (album_text.length === 0)會告訴你,如果數組是空的,只要它是一個有效的,初始化數組(它是在這裏)。

你想用這個選擇器做什麼$("input[name='album_text[]']")

+5

@MaciekSemik - 請參閱http://stackoverflow.com/questions/359494/does-it-matter-which-equals-operator-vs-i-use-in-javascript-comparisons。除非我特別想要允許類型轉換,否則我總是使用嚴格平等('===')。這是一個很好的習慣。 – jfriend00

6

您應該檢查''(空字符串)。你的數組的元素是空字符串。然後你的album_text.length === 0將工作得很好。

+0

請參閱最新的代碼。我添加了這個代碼if($(this).val()&& $(this).val()!='')'但它不起作用。 – input

55

用戶jQuery是EmptyObject檢查陣列是包含元素或沒有。

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

比檢查長度更可靠,特別是如果您的變量也可以是對象(使用對象,長度不檢查是否空)。 – gaborous

+0

在我看來這是更合適的答案。 – earl3s

+3

如果擴展Array.prototype,則isEmptyObject總是返回false。 'Array.prototype.someFunction = function(){};' - 即使數組是空的。請注意,某些框架(例如Ember.js)默認擴展了Array原型。 – jesenko

6

我認爲這是很危險的使用$ .isEmptyObject從jQuery來檢查數組是否爲空,如@jesenko提及。我剛剛遇到了這個問題。

isEmptyObject doc,它提到:

的參數應該永遠是一個普通的JavaScript對象

您可以通過$.isPlainObject確定。 $.isPlainObject([])的返回是錯誤的。