检查数组是否为空或为空

inp*_*put 98 arrays jquery 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
}
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 153

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

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
}
Run Code Online (Sandbox Code Playgroud)

关于你在做什么和我改变了什么的一些注意事项.

  1. $(this)始终是一个有效的jQuery对象,所以没有理由去检查if ($(this)).它里面可能没有任何DOM对象,但你可以$(this).length在需要的时候检查它,但是这里没有必要,因为.each()如果没有项目就不会运行循环,所以$(this)你的.each()循环内部总是会有东西.
  2. 在同一个函数中多次使用$(this)效率很低.将它一次放入局部变量然后从该局部变量中使用它会好得多.
  3. 建议使用[]而不是初始化数组new Array().
  4. if (value)当值预期为一个字符串无论是从保护value == null,value == undefined并且value == ""这样你就不必做if (value && (value != "")).您可以这样做:if (value)检查所有三个空条件.
  5. if (album_text.length === 0) 会告诉你数组是否为空,只要它是一个有效的初始化数组(它在这里).

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

  • @MaciekSemik - 请参阅http://stackoverflow.com/questions/359494/does-it-matter-which-equals-operator-vs-i-use-in-javascript-comparisons.除非我特别想允许类型转换,否则我总是使用严格相等(`===`).进入是一个很好的习惯. (5认同)

May*_*ure 66

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

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

  • 注意`isEmptyObject`!对于jQuery 1.8.3`jQuery.isEmptyObject([])`返回`false`,但是对于jQuery 1.11.3,它返回`true`.实际上,[jQuery文档](https://api.jquery.com/jQuery.isEmptyObject/)说**参数应该始终是一个普通的JavaScript对象作为其他类型的对象(DOM元素,原始字符串/数字,宿主对象) )可能无法在浏览器中提供一致的结果.**抱歉,没有看到@rhinoxi的回答. (4认同)
  • 如果`Array.prototype`被扩展,`isEmptyObject`总是返回`false`,例如`Array.prototype.someFunction = function(){};` - 即使数组是空的.请注意,默认情况下,某些框架(例如Ember.js)会扩展Array原型. (3认同)
  • 比检查长度可靠得多,特别是如果您的变量也可以是一个对象(对于对象,长度不能检查是否为空)。 (2认同)

Dan*_*ite 8

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


小智 7

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

isEmptyObject文档中,它提到:

参数应始终是纯JavaScript对象

你可以确定$.isPlainObject.回归$.isPlainObject([])是假的.