【问题标题】:How can I check JavaScript arrays for empty strings?如何检查 JavaScript 数组中的空字符串?
【发布时间】:2021-06-16 18:37:29
【问题描述】:

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

例子:

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

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

【问题讨论】:

  • 空是指undefined还是空字符串?
  • var my_arr = new Array(); my_arr[0] = ""; my_arr[1] = "你好"; my_arr[2] = "";这里第 0 个和第 2 个元素是空的
  • 这是 Java 问题还是 javascript 问题?这些是完全不相关的。哦,现在它看起来像带有所有这些 $ 符号的 PHP。下定决心……
  • santanu,您刚刚发布的代码是PHP。不是 JavaScript。
  • @santanu:我将您的代码转换为 JavaScript 并将其添加到您的问题中。

标签: javascript arrays


【解决方案1】:

您可以通过使用简单的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 不支持数组上的这个函数,至少现在还不支持。

【讨论】:

  • 这不是 OP 要求的相反(如果数组只有空元素则返回 true,而不是如果任何元素为空则返回 false)?
  • 对数组的 indexOf 进行良好调用。现在让我们希望 IE 开发团队的人能够阅读并修复它!
  • @Telemachus - 很好,我错过了他明确的“哪个结果是错误的”要求,更新了:)
  • 如果我们将isEmpty函数作为HasEmpty的第二个参数,并默认使用arr[i] === ""实现会不会更好。
  • FWIW,在我们放弃对 indexOf() 和其他 ECMAScript 5th 数组函数。 blogs.msdn.com/b/ie/archive/2010/06/25/…
【解决方案2】:

你必须通过循环签入。

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

【讨论】:

    【解决方案3】:

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

    return jQuery.inArray("", my_arr)
    

    【讨论】:

    • 为此包含 jQuery 似乎只是有点矫枉过正,你不觉得吗?
    • @Nick Craver - 是的,如果这是使用 jQuery 的唯一原因,那就太过分了。另一方面,当使用 jQuery 时,这是一个很好的解决方案 :-)
    • @Vitalii - Sometimes 它被使用了,它仍然是少数,我的意思是你应该在没有标记 jQuery 的问题上使用“如果你”这样的问题来限定这种类型的答案已经在使用 jQuery..." 一个新手后来发现这个并包含 jQuery for just 这将是一件坏事。
    • @Vitalii - 我想你误会了,我的意思是 JS 新手,而不是 SO 新手。根据定义,他们不知道什么是最好的:)
    【解决方案4】:

    使用"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 循环快得多!

    【讨论】:

      【解决方案5】:

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

      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:误读了真/假期望。

      ..弗雷德里克

      【讨论】:

        【解决方案6】:
        function containsEmpty(a) {
            return [].concat(a).sort().reverse().pop() === "";
        }
        alert(containsEmpty(['1','','qwerty','100'])); // true
        alert(containsEmpty(['1','2','qwerty','100'])); // false
        

        【讨论】:

          【解决方案7】:

          对于一维数组

          array.some(Boolean)
          

          对于多维数组

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

          【讨论】:

          【解决方案8】:

          现在我们可以使用Array.includes

          my_arr.includes("")
          

          返回一个布尔值

          【讨论】:

            【解决方案9】:
            yourArray.join('').length > 0
            

            加入你的数组,中间没有任何空格,并检查它的长度。如果长度大于零,则表示数组不为空。如果长度小于或等于零,则数组为空。

            【讨论】:

            • 虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的回答添加解释并说明适用的限制和假设。
            【解决方案10】:

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

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

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

            【讨论】:

              【解决方案11】:

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

              【讨论】:

                【解决方案12】:
                my_arr.includes("")
                

                这返回了 undefined 而不是布尔值,所以这里是 alternative

                function checkEmptyString(item){
                     if (item.trim().length > 0) return false;
                     else return true;
                    };
                    
                function checkIfArrayContainsEmptyString(array) {
                  const containsEmptyString = array.some(checkEmptyString);
                  return containsEmptyString;
                };
                    
                console.log(checkIfArrayContainsEmptyString(["","hey","","this","is","my","solution"]))
                // *returns true*
                
                console.log(checkIfArrayContainsEmptyString(["yay","it","works"]))
                // *returns false*

                【讨论】:

                  【解决方案13】:
                  var containsEmpty = !my_arr.some(function(e){return (!e || 0 === e.length);});
                  

                  这会检查 0、假、未定义、“”和 NaN。 它也是单行程序,适用于 IE 9 及更高版本。

                  【讨论】:

                    【解决方案14】:

                    检测字符串是否有空元素的单行解决方案

                    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)

                    【讨论】:

                      【解决方案15】:

                      如果您只关心空字符串,那么它会这样做:

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

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

                      【讨论】:

                        【解决方案16】:

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

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

                        .filter(x =&gt; x) 将返回数组中所有非空或未定义的元素。然后比较原始数组的长度。如果它们不同,则表示该数组包含空字符串。

                        【讨论】:

                          【解决方案17】:

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

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

                          //控制台输出 真的

                          【讨论】:

                          猜你喜欢
                          • 2020-11-21
                          • 2018-11-28
                          • 1970-01-01
                          • 2021-10-05
                          • 1970-01-01
                          相关资源
                          最近更新 更多