检查数组是否为空或空


106

我想知道如何在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”中的方法相同: stackoverflow.com/questions/2672380/…–
朱利安·施密特

1
@Julien,在启动该线程之前,我尝试了该线程中列出的所有解决方案。他们都不以某种方式工作。
输入

我们可以获取更多上下文代码吗?周围的JavaScript,HTML?您确定这$("input[name='album_text[]']")实际上是返回元素吗?
乔恩·亚当斯

@JulienSchmidt:您链接到的问题是关于检查数组是否为空,而不是整个数组。
Dan Dascalescu

Answers:


168

只要您的选择器实际上在工作,我就不会发现检查数组长度的代码有问题。那应该做你想要的。有很多方法可以使您的代码更简洁,更易读。这是一个清理版本,其中包含有关我清理的内容的注释。

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 == undefined而且value == ""这样你就不必做if (value && (value != ""))。您可以执行以下操作:if (value)检查所有三个空白条件。
  5. if (album_text.length === 0) 会告诉您该数组是否为空,只要它是有效的,已初始化的数组(就在此处)。

您正在尝试使用此选择器做$("input[name='album_text[]']")什么?


5
@MaciekSemik-参见stackoverflow.com/questions/359494/…===除非我特别想允许类型转换,否则我总是使用严格相等()。养成一个好习惯。
jfriend00 2014年

73

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

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

2
比检查长度可靠得多,尤其是如果您的变量也可以是一个对象(对于对象,长度不能检查是否为空)。
令人惊讶的2014年

我认为这是更合适的答案。
Earl3s 2015年

4
isEmptyObjectfalse如果Array.prototype扩展则总是返回,例如Array.prototype.someFunction = function () {};-即使数组为空。请注意,默认情况下,某些框架(例如Ember.js)扩展了Array原型。
jesenko

4
请注意isEmptyObject!对于jQuery 1.8.3 jQuery.isEmptyObject([])返回false,但对于jQuery 1.11.3它返回true。实际上,jQuery文档该参数应该始终是普通的JavaScript对象,因为其他类型的对象(DOM元素,原始字符串/数字,宿主对象)在浏览器之间可能无法给出一致的结果。抱歉,没有看到@rhinoxi的答案。
德米特里·凡申宁

8

您应该''在插入数组之前检查(空字符串)。您的数组中的元素为空字符串。这样您的album_text.length === 0工作就可以了。


请查看更新后的代码。我添加了此代码,if( $(this).val() && $(this).val() != '') 但它不起作用。
输入

8

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

isEmptyObject doc中,它提到:

参数应始终是普通的JavaScript对象

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.