检查数组是否为空或为空

时间:2011-08-25 23:01:38

标签: jquery arrays is-empty

我想知道如何在jQuery中检查数组是空还是null。我试过了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
}

4 个答案:

答案 0 :(得分:141)

只要您的选择器实际工作,我发现检查数组长度的代码没有任何问题。那应该做你想要的。清理代码有很多方法可以更简单,更易读。这是一个清理版本,附有关于我清理的内容的说明。

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检查,但是这里没有必要,因为如果没有项目,.each()循环将不会运行$(this)循环中的.each()始终是一个东西。
  2. 在同一个函数中多次使用$(this)效率很低。将它一次放入局部变量然后从该局部变量中使用它会好得多。
  3. 建议使用[]而不是new Array()初始化数组。
  4. if (value)当值预计为字符串时,将同时保护value == nullvalue == undefinedvalue == "",因此您无需执行if (value && (value != "")) 。你可以这样做:if (value)检查所有三个空条件。
  5. if (album_text.length === 0)会告诉您数组是否为空,只要它是一个有效的初始化数组(它就在这里)。
  6. 您要对此选择器$("input[name='album_text[]']")做什么?

答案 1 :(得分:65)

User JQuery是EmptyObject,用于检查数组是否包含元素。

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

答案 2 :(得分:7)

在推入阵列之前,您应该检查''(空字符串)。您的数组包含空字符串元素。那么你的album_text.length === 0就可以了。

答案 3 :(得分:7)

我认为使用来自jquery的$ .isEmptyObject检查数组是否为空是危险的,如@jesenko所述。我刚刚遇到了这个问题。

isEmptyObject doc中,它提到:

  

参数应始终是纯JavaScript对象

您可以$.isPlainObject确定。 $.isPlainObject([])的返回是错误的。