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

时间:2010-08-11 11:34:03

标签: javascript arrays

我需要检查数组是否包含至少一个空元素。如果任何一个元素为空,那么它将返回false。

示例:

var my_arr = new Array(); 
my_arr[0] = ""; 
my_arr[1] = " hi ";
my_arr[2] = "";

第0和第2个数组元素为“空”。

17 个答案:

答案 0 :(得分:17)

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

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

You can give it a try here,我们之前没有使用.indexOf()的原因是IE中缺乏支持,否则它会更简单:

function NoneEmpty(arr) {
  return arr.indexOf("") === -1;
}

但是,唉,IE不支持这个函数在数组上,至少现在还没有。

答案 1 :(得分:10)

您必须通过循环办理登机手续。

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

答案 2 :(得分:7)

您可以尝试jQuery.inArray()功能:

return jQuery.inArray("", my_arr)

答案 3 :(得分:3)

你可以为此做一个简单的帮助方法:

function hasEmptyValues(ary) {
    var l = ary.length,
        i = 0;

    for (i = 0; i < l; i += 1) {
        if (!ary[i]) {
            return false;
        }
    }

    return true;
}

//check for empty
var isEmpty = hasEmptyValues(myArray);

编辑:这会检查falseundefinedNaNnull""0

EDIT2:误读了真/假的期望。

..弗雷德里克

答案 4 :(得分:3)

function containsEmpty(a) {
    return [].concat(a).sort().reverse().pop() === "";
}
alert(containsEmpty(['1','','qwerty','100'])); // true
alert(containsEmpty(['1','2','qwerty','100'])); // false

答案 5 :(得分:1)

使用"higher order function"之类的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);

现代Javascript:单行

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

关于性能的说明

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

但是,如果您需要循环访问数组中的所有元素-也许要检查每个项目是否为空字符串-过滤器可能比for循环快得多!< / p>

答案 6 :(得分:1)

现在我们可以使用Array.includes

my_arr.includes("")

返回布尔值

答案 7 :(得分:1)

对于一维数组

array.some(Boolean)

对于多维数组

array.some(row => row.some(Boolean))

答案 8 :(得分:1)

只需在循环中执行 len(my_arr[i]) == 0; 以检查字符串是否为空。

答案 9 :(得分:1)

我在你的评论中看到你提供的代码示例是PHP的问题,所以我想知道你是否真的要使用PHP?在PHP中它将是:

function hasEmpty($array)
{
  foreach($array as $bit)
  {
    if(empty($bit)) return true;
  }

  return false;
}

否则如果您确实需要JavaScript,我会参考Nick Craver的回答

答案 10 :(得分:0)

var containsEmpty = !my_arr.some(function(e){return (!e || 0 === e.length);});

检查0,false,undefined,&#34;&#34;和NaN。 它也是一个单行,适用于IE 9及更高版本。

答案 11 :(得分:0)

一种解决方案,用于检查字符串是否包含空元素

let emptyStrings = strArray.filter(str => str.trim().length <= 0);

let strArray = ['str1', '', 'str2', ' ', 'str3', '    ']
let emptyStrings = strArray.filter(str => str.trim().length <= 0);
console.log(emptyStrings)

一种解决方案,可以从数组中获取非空字符串

let nonEmptyStrings = strArray.filter(str => str.trim().length > 0);

let strArray = ['str1', '', 'str2', ' ', 'str3', '    ']
let nonEmptyStrings = strArray.filter(str => str.trim().length > 0);
console.log(nonEmptyStrings)

答案 12 :(得分:0)

如果您只关心空字符串,则可以这样做:

const arr = ["hi","hello","","jj"]
('' in arr) //returns false

最后一行检查在数组中是否找到空字符串。

答案 13 :(得分:0)

我不知道这是否是最高效的方法,但这是ES2015 +中的一种方法:

// true if not empty strings
// false if there are empty strings
my_arr.filter(x => x).length === my_arr.length

.filter(x => x)将返回数组中所有不为空或未定义的元素。然后,您比较原始数组的长度。如果它们不同,则意味着该数组包含空字符串。

答案 14 :(得分:0)

<img>

这返回了 undefined 而不是布尔值,因此这是一个替代

my_arr.includes("")

答案 15 :(得分:0)

yourArray.join('').length > 0

加入数组,中间不要留任何空格,并检查其长度。如果长度大于零,则表示数组不为空。如果length小于或等于零,则数组为空。

答案 16 :(得分:-2)

array.includes("") 工作得很好。

让 a = ["content1", "", "content2"]; console.log(a.includes(""));

//控制台输出 真的