118

我想知道如何在 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

5 回答 5

181

只要您的选择器实际工作,我认为检查数组长度的代码没有任何问题。那应该做你想做的事。有很多方法可以让你的代码更简单、更易读。这是一个清理过的版本,其中包含关于我清理过的内容的注释。

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 预计是一个字符串时,将同时保护 from value == nullvalue == undefined因此value == ""您不必这样做if (value && (value != ""))。您可以这样做:if (value)检查所有三个空条件。
  5. if (album_text.length === 0)只要数组是有效的、已初始化的数组(它就在这里),它就会告诉你数组是否为空。

你想用这个选择器做$("input[name='album_text[]']")什么?

于 2011-08-25T23:48:56.193 回答
80

用户 JQuery 是 EmptyObject 来检查数组是否包含元素。

var testArray=[1,2,3,4,5];
var testArray1=[];
console.log(jQuery.isEmptyObject(testArray)); //false
console.log(jQuery.isEmptyObject(testArray1)); //true
于 2014-06-02T16:38:32.267 回答
9

我认为使用 jquery 中的 $.isEmptyObject 来检查数组是否为空是很危险的,正如@jesenko 提到的那样。我刚遇到那个问题。

isEmptyObject 文档中,它提到:

参数应始终是纯 JavaScript 对象

您可以通过 确定$.isPlainObject。的返回$.isPlainObject([])是假的。

于 2016-02-22T07:06:58.410 回答
8

''在推入阵列之前,您应该检查(空字符串)。您的数组包含空字符串元素。然后你album_text.length === 0会工作得很好。

于 2011-08-25T23:03:55.447 回答
2
/*
  Basic Checking with undefined array for Jquery Array
*/
if (typeof myArray !== 'undefined' && myArray.length > 0) {
    console.log('myArray is not empty.');
}else{
    console.log('myArray is empty.');
}
于 2021-10-28T04:28:16.923 回答