如何检查JavaScript数组中的空字符串?

San*_*anu 9 javascript arrays

我需要检查数组是否包含至少一个空元素.如果任何一个元素为空,则返回false.

例:

var my_arr = new Array(); 
my_arr[0] = ""; 
my_arr[1] = " hi ";
my_arr[2] = "";
Run Code Online (Sandbox Code Playgroud)

第0和第2个数组元素为"空".

Nic*_*ver 17

您可以通过简单循环遍历数组进行检查for,如下所示:

function NoneEmpty(arr) {
  for(var i=0; i<arr.length; i++) {
    if(arr[i] === "") return false;
  }
  return true;
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里尝试一下,我们.indexOf()这里没有使用的原因是IE中缺乏支持,否则它会更简单:

function NoneEmpty(arr) {
  return arr.indexOf("") === -1;
}
Run Code Online (Sandbox Code Playgroud)

但唉,IE不支持数组上的这个功能,至少现在还没有.


Azh*_*har 10

你必须通过循环检查.

function checkArray(my_arr){
   for(var i=0;i<my_arr.length;i++){
       if(my_arr[i] === "")   
          return false;
   }
   return true;
}
Run Code Online (Sandbox Code Playgroud)


Vit*_*nko 7

你可以尝试jQuery.inArray()函数:

return jQuery.inArray("", my_arr)
Run Code Online (Sandbox Code Playgroud)

  • 包括jQuery在内似乎*只是*有点矫枉过正,不要想? (5认同)
  • @Nick Craver - 是的,如果这是使用 jQuery 的唯一原因,那就太过分了。另一方面,当使用 jQuery 时,这是一个很好的解决方案 :-) (2认同)

Dus*_*els 5

使用“高阶函数”(例如filter代替循环)有时可以使代码更快、更安全、更易读。在这里,您可以过滤数组以删除不是字符串的项目,然后检查结果数组的长度。

基本 JavaScript

var my_arr = ["", "hi", ""]

// only keep items that are the empty string
new_arr = my_arr.filter(function(item) {
  return item === ""
})

// if filtered array is not empty, there are empty strings
console.log(new_arr);
console.log(new_arr.length === 0);
Run Code Online (Sandbox Code Playgroud)

现代 Javascript:单行代码

var my_arr = ["", "hi", ""]
var result = my_arr.filter(item => item === "").length === 0
console.log(result);
Run Code Online (Sandbox Code Playgroud)

关于性能的说明

在这种情况下,循环可能会更快,因为一旦找到空字符串就可以停止循环。为了代码简洁性和可读性,我可能仍然选择使用filter,但是这两种策略都是合理的。

然而,如果您需要循环遍历数组中的所有元素(也许是为了检查每个项目是否为空字符串),过滤器可能会比 for 循环快得多!