检查数组是否为空或存在

use*_*141 315 javascript jquery

对于第一页加载,我需要检查是否有image_array最后一个图像加载,否则阻止预览按钮; 提醒用户按下新图像按钮; 创建空数组以放置图像;

问题是image_arrayelse火灾中所有时间.如果数组存在 - 它只是覆盖它,但警告剂量工作.

if(image_array.length > 0)
    $('#images').append('<img src="'+image_array[image_array.length-1]+'" class="images" id="1" />');
else{
    $('#prev_image').attr('disabled', 'true');
    $('#next_image').attr('disabled', 'true');
    alert('Please get new image');
    var image_array = [];
}
Run Code Online (Sandbox Code Playgroud)

更新在加载html之前我有类似的东西

<?php if(count($images) != 0): ?>
<script type="text/javascript">
    <?php echo "image_array = ".json_encode($images);?>
</script>
<?php endif; ?>
Run Code Online (Sandbox Code Playgroud)

jba*_*bey 475

if (typeof image_array !== 'undefined' && image_array.length > 0) {
    // the array is defined and has at least one element
}
Run Code Online (Sandbox Code Playgroud)

由于隐式全局变量和变量提升的混合,您的问题可能正在发生.确保var在声明变量时使用:

<?php echo "var image_array = ".json_encode($images);?>
// add var  ^^^ here
Run Code Online (Sandbox Code Playgroud)

然后确保您以后从未意外地重新声明该变量:

else {
    ...
    image_array = []; // no var here
}
Run Code Online (Sandbox Code Playgroud)

  • 不.当image_array为null时,这将爆炸.墨菲定律指出有一天它会. (31认同)
  • `if(image_array && image_array.length){//数组存在且具有元素` (11认同)
  • `image_array.length`不够吗?(没有指定`> 0`) (6认同)

Poo*_*avi 154

注意:千万不能用这个,有找到一个更好的方式,如果一个数组存在,它的非空.

检查数组是否为空.

if (Array.isArray(array) && array.length) {
    // array exists and is not empty
}
Run Code Online (Sandbox Code Playgroud)

紧凑版

typeof array != "undefined"
    && array != null
    && array.length != null
    && array.length > 0
Run Code Online (Sandbox Code Playgroud)

CoffeeScript版本

if (typeof array != "undefined" && array != null && array.length != null && array.length > 0) {
    // array exists and is not empty
}
Run Code Online (Sandbox Code Playgroud)

为什么?

案例未定义

未定义变量是一个尚未为其分配任何内容的变量.

if array?.length > 0
Run Code Online (Sandbox Code Playgroud)

Case Null

一般来说,null是缺少值的状态.例如,当您错过或无法检索某些数据时,变量为null.

let array = new Array();     // "array" !== "array"
typeof array == "undefined"; // => true
Run Code Online (Sandbox Code Playgroud)

案例不是数组

Javascript有一个动态类型系统.这意味着我们不能保证变量保持什么类型的对象.
我们有可能不会和一个实例交谈Array.

array = searchData();  // can't find anything
array == null;         // => true
Run Code Online (Sandbox Code Playgroud)

案例空数组

现在,因为我们测试了所有其他可能性,我们正在谈论一个实例Array.

为了确保它不是空的,我们询问它所持有的元素的数量,并确保它具有多于零的元素.

supposedToBeArray =  new SomeObject();
typeof supposedToBeArray.length;       // => "undefined"

array = new Array();
typeof array.length;                   // => "number"
Run Code Online (Sandbox Code Playgroud)

  • 请注意,仅仅检查`(typeof array!="undefined"&& array.length> 0)是不够**因为如果`array`为null我们将得到`TypeError:无法读取属性'长度为'null'. (7认同)

Que*_*ueg 69

怎么样(ECMA 5.1):

if(Array.isArray(image_array) && image_array.length){
  // array exists and is not empty
}
Run Code Online (Sandbox Code Playgroud)

  • 重新`.. &amp;&amp; image_array.length)`。恕我直言,虽然你*可以*安全地依赖 JS 的松散类型,将“0”整数转换为“false”,将“非零”整数转换为“true”,但我认为为了将来的可读性,最好这样做, “说出你的意思”。我会做`.. &amp;&amp; image_array.length &gt; 0)`。 (3认同)

Lon*_*Cpp 20

可选链接

随着可选链提案达到第 4 阶段并获得更广泛的支持,有一种非常优雅的方法可以做到这一点

if(image_array?.length){

  // image_array is defined and has at least one element

}
Run Code Online (Sandbox Code Playgroud)


Jam*_*ard 18

这就是我使用的.第一个条件包括truthy,它具有null和undefined.第二个条件检查空数组.

if(arrayName && arrayName.length > 0){
    //do something.
}
Run Code Online (Sandbox Code Playgroud)

或者感谢tsemer的评论我添加了第二个版本

if(arrayName && arrayName.length)
Run Code Online (Sandbox Code Playgroud)

然后我在Firefox中使用Scratchpad对第二个条件进行了测试:

var array1;
var array2 = [];
var array3 = ["one", "two", "three"];
var array4 = null;
Run Code Online (Sandbox Code Playgroud)

的console.log(数组1); 的console.log(数组2); 的console.log(ARRAY3); 的console.log(array4);

if(array1 && array1.length){
  console.log("array1! has a value!");
}

if(array2 && array2.length){
  console.log("array2! has a value!");
}

if(array3 && array3.length){
  console.log("array3! has a value!");
}

if(array4 && array4.length){
  console.log("array4! has a value!");
}
Run Code Online (Sandbox Code Playgroud)

然后结果:

未定义

[]

["一二三"]

空值

最后的测试显示

if(array2 && array2.length){

是相同的

if(array2 && array2.length > 0){

ARRAY3!有价值!

  • 我发现这是最简洁的,涵盖了所有异常问题.既然你喜欢真实,甚至可以用`if(arrayName && arrayName.length)`来做 (10认同)
  • 简短快捷!我花了一些时间来自C#来习惯if(obj)检查null,但现在我喜欢它:if(obj)// null check; if(array && array.length)//数组null或空检查; if(array &&!array.length)//数组是否存在,但是空检查; if(str)// string不为null且不为空.如果零是有效数字,唯一的问题就是不要使用数字. (2认同)
  • 我一直在使用 (arrayName &amp;&amp; arrayName.length) 一段时间然后我担心它是否有问题。这个答案安慰了我,谢谢:) (2认同)
  • 同意@Koray,这值得更多的支持! (2认同)

Sam*_*son 15

你应该使用:

  if (image_array !== undefined && image_array.length > 0)
Run Code Online (Sandbox Code Playgroud)


Mik*_*ant 8

如果要测试是否已定义图像数组变量,可以这样做

if(typeof image_array === 'undefined') {
    // it is not defined yet
} else if (image_array.length > 0) {
    // you have a greater than zero length array
}
Run Code Online (Sandbox Code Playgroud)

  • 使用===而不是:) (3认同)

May*_*ure 6

您可以使用jQuery isEmptyObject()来检查数组是否包含元素.

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)

资料来源:https://api.jquery.com/jQuery.isEmptyObject/


Ami*_*gat 6

的JavaScript

( typeof(myArray) !== 'undefined' && Array.isArray(myArray) && myArray.length > 0 )
Run Code Online (Sandbox Code Playgroud)

Lodash和下划线

( _.isArray(myArray) && myArray.length > 0 )
Run Code Online (Sandbox Code Playgroud)


小智 5

使用undescorelodash

_.isArray(image_array) && !_.isEmpty(image_array)