【问题标题】:Check if array is empty or null检查数组是否为空或空
【发布时间】:2011-11-04 02:53:33
【问题描述】:

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

【问题讨论】:

  • 与“普通 JavaScript”中的方式相同:stackoverflow.com/questions/2672380/…
  • @Julien,在开始此线程之前,我尝试了该线程中列出的所有解决方案。他们都没有以某种方式工作。
  • 我们能得到更多的上下文代码吗?围绕JavaScript,HTML?你确定 $("input[name='album_text[]']") 实际上是在返回元素吗?
  • @JulienSchmidt:您链接到的问题是关于检查数组 value 是否为空,而不是整个数组。

标签: jquery arrays is-empty


【解决方案1】:

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

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) 会告诉你数组是否为空,只要它是一个有效的、已初始化的数组(它就在这里)。

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

【讨论】:

【解决方案2】:

User JQuery is EmptyObject 判断数组是否包含元素。

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

【讨论】:

  • 比检查长度可靠得多,尤其是如果你的变量也可以是一个对象(有对象,长度不能检查是否为空)。
  • 我认为这是更合适的答案。
  • isEmptyObject 总是返回 false 如果 Array.prototype 被扩展,例如Array.prototype.someFunction = function () {}; - 即使数组为空。请注意,某些框架(例如 Ember.js)默认扩展 Array 原型。
  • 小心isEmptyObject!对于 jQuery 1.8.3 jQuery.isEmptyObject([]) 返回 false,但对于 jQuery 1.11.3 它返回 true。实际上,jQuery documentation参数应该始终是纯 JavaScript 对象,因为其他类型的对象(DOM 元素、原始字符串/数字、主机对象)可能无法在浏览器之间给出一致的结果。 抱歉,没有'看不到 @rhinoxi 的答案。
【解决方案3】:

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

isEmptyObject doc 中提到:

参数应始终是纯 JavaScript 对象

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

【讨论】:

    【解决方案4】:

    在推入数组之前,您应该检查''(空字符串)。您的数组包含空字符串元素。然后你的album_text.length === 0 就可以正常工作了。

    【讨论】:

    • 请查看更新后的代码。我添加了此代码if( $(this).val() && $(this).val() != '') 但它不起作用。
    【解决方案5】:
    /*
      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.');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 2017-09-13
      • 2011-01-23
      • 2018-09-29
      相关资源
      最近更新 更多