【问题标题】:How to check if all array values are blank in Javascript如何检查Javascript中的所有数组值是否为空
【发布时间】:2022-01-17 08:22:58
【问题描述】:

我有一个类似的数组:

["", "", "", "1", "", ""]

我想在所有数组值都是blanks时发出警报,即当数组是这样的时候:

["", "", "", "", "", ""]

我怎样才能做到这一点。

【问题讨论】:

  • 怎么是重复的@Faisal?
  • 我认为描述更适合描述可观察数组。
  • 但它不是重复的@Faizal。
  • Erm...上面不需要观察任何东西@Faisal

标签: javascript arrays


【解决方案1】:

试试这个,

["", "", "", "", "", ""].join("").length==0

如果要删除空格,

["", "", "", "", "", ""].join("").replace(/\s/gi,'').length==0

注意:

这不适用于["", [], "", null, undefined, ""] 之类的输入

【讨论】:

  • 如果数组中有空格也可以trim():)
  • array.join("").replace(/\s/gi,'').length==0 将是这个答案的改进版本。
  • 我不想修剪,因为我必须使用空白值
  • 我希望他不担心空格,无论如何更新了答案。 @VikashSingh
  • 请注意,这将返回 true 的输入,例如:["", [], "", null, undefined, ""]。如果您严格查看所有项目都是空字符串"",那么这不会很好。
【解决方案2】:

使用every():

const allEmpty = arr => arr.every(e => e === "");
console.log(allEmpty(["", "", "", "1", "", ""]));
console.log(allEmpty(["", "", "", "", "", ""]));

【讨论】:

  • 只是出于好奇:在这种情况下使用===== 会更好,还是根本不重要?
  • 哎呀-我错过了@Terry。谢谢!最好使用===,因为如果数组元素是0,那么它将被删除(因为0 == "")。试试看 - 它评估为真! (奇怪,我知道 - 但他们都评估为 false
【解决方案3】:

您始终可以使用基本的for 循环来解决您的问题:

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

    return true;
}

console.log(allBlanks(["", "", "", "1", "", ""]));
console.log(allBlanks(["", "", "", "", "", ""]));
console.log(allBlanks(["", [], "", null, undefined, ""]));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

【讨论】:

    【解决方案4】:

    这也是一种更通用的方法,它将 compact 数组删除所有 falsey 值,然后检查剩余长度:

    let compact = a => a.reduce((r,c) => (!!c ? r.push(c) : null, r),[])
    
    let isEmpty = array => compact(array).length == 0
    
    console.log(isEmpty(["", false, 0, "", null, undefined])) // true
    console.log(isEmpty(["", 1]))   // false
    console.log(isEmpty(["", []]))  // false
    console.log(isEmpty(["", {}]))  // false

    但如果这是您关心的唯一用例,那么您也可以使用Array.some

    let isEmpty = a => !a.some(x => x !== '')
    
    // OR let isEmpty = a => !a.some(x => x.toString().length > 0)
    
    console.log(isEmpty(["", "", "", "", "", ""]))
    console.log(isEmpty(["", "", "1", "", "", ""]))

    你也可以使用Array.reduce:

    let isEmpty = a => !a.reduce((r,c) => `${r}${c}`).length
    
    console.log(isEmpty(["", "", "", "", "", ""]))
    console.log(isEmpty(["", "", "1", "", "", ""]))

    Array.filter:

    let isEmpty = a => !a.filter(x => x.toString().length).length
    
    console.log(isEmpty(["", "", "", "", "", ""]))
    console.log(isEmpty(["", "", "1", "", "", ""]))

    不过,这只会对您当前的输入进行有效检查。不适用于将数组、对象文字等作为输入数组的一部分的情况。


    如果您使用的是lodash,这可能是(通过_.every_.isEmpty):

    let isArrayEmpty = a => _.every(a, _.isEmpty)
    
    console.log(isArrayEmpty(["", "", "", "", "", ""]))
    console.log(isArrayEmpty(["", "", "1", "", "", ""]))
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"&gt;&lt;/script&gt;

    或者也可以通过_.compact 删除虚假值:

    let isArrayEmpty = a => !_.compact(a).length
    
    console.log(isArrayEmpty(["", "", "", "", "", ""]))
    console.log(isArrayEmpty(["", "", "1", "", "", ""]))
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"&gt;&lt;/script&gt;

    【讨论】:

      【解决方案5】:

      const isEmpty=arr=>{
        return arr.filter(it=>it.length>0).length ==0
      }
      
      arr1 = ["",""]
      arr2 = ["1",""]
      
      console.log(isEmpty(arr1))
      console.log(isEmpty(arr2))

      【讨论】:

        【解决方案6】:
        var arr1 = ["", "", "", "1", "", ""];
        var arr2 = ["", "", "", "", "", ""];
        
        function checkArrValEmpty(arr) {
          let count = 0;
          for(let i = 0; i < arr.length; i++) {
            if(arr[i].trim().length === 0) {`enter code here`
              count++;
            }
          }
          return count === arr.length
        }
        
        console.log(checkArrValEmpty(arr2));
        console.log(checkArrValEmpty(arr1));
        

        【讨论】:

          【解决方案7】:

          function isEmpty (arr){
            return arr.every(e => e === "")
          };
          let a = ["", "", "", "1", "", ""];
          let b = ["", "", "", "", "", ""] 
          console.log(isEmpty(a));
          console.log(isEmpty(b));

          【讨论】:

            【解决方案8】:

            我实现了检查空数组的小功能,该功能适用​​于所有浏览器。

            var list=["1", [], "", null, undefined, ""];
            var listE=["", "", "","", "", "", ""];
            var listE1=["", [], "", null, undefined, ""];
            
            function isArrayEmpty(arr){
            return arr.toString().replace(/,/g, '')=="";
            }
            
            alert(isArrayEmpty(list))
            alert(isArrayEmpty(listE))
            alert(isArrayEmpty(listE1))

            【讨论】:

              【解决方案9】:

              1) 将数组的大小保持为长度
              2) 查找编号。数组中的空值并将其存储在一个变量中 (EmptyValues)
              3) 检查是否 (EmptyValue== length) { Give Alert any you want}

              function checkBlankvalues(arr){
              var emptyValues=0,length=arr.length;
              //for finding empty vales in array till now
              for(var i=0;i<arr.length;i++)
              { 
                 if(arr[i]="")
                 {
                   emptyValues++;
                 }
              }
              if(length==emptyValue)
              {
               //alert("array is blank");
              }
              }
              

              【讨论】:

                【解决方案10】:
                TL;DR(最快和简单)
                [].some(Boolean)  //  Empty : false   |   Not Empty : true
                
                说明

                混合原生函数,Boolean.some().filter() 或使用 .join() 可以返回预期结果:

                var a=['','','','',''],   // Empty
                    b=['','','x','',''];  // Not Empty
                
                // Is Not Empty?
                
                // #1
                console.log( a.some(Boolean) ); // false
                console.log( b.some(Boolean) ); // true
                
                // #2
                console.log( a.filter(Boolean).length ); // = 0
                console.log( b.filter(Boolean).length ); // != 0
                
                // #3
                console.log( a.join('')!='' ); // false
                console.log( b.join('')!='' ); // true

                也是一个用户定义的函数:

                var a=['','','','',''],   // Empty
                    b=['','','x','',''];  // Not Empty
                        
                function isArrayEmpty(a) { 
                  for (var i = 0; i < a.length; i++) 
                    if (a[i]) return false;
                  return true;
                }
                
                console.log( isArrayEmpty(a) ); // true
                console.log( isArrayEmpty(b) ); // false

                但关于性能

                1. .some(Boolean) ~40M ops/s (每秒操作数)
                2. isArrayEmpty() ~36M ops/s (慢~10%)
                3. .filter(Boolean).length ~9M ops/s (慢~75%)
                4. .join('')!='' ~4M ops/s (慢~90%)

                注意 (1): 使用 Arrow functions (a)=&gt;a 而不是布尔值,会降低性能,在这些情况下会慢约 5%。

                注(2):当我们确定所有的数组项都是String时,预期的结果是一样的。关于其他falsy s (null or false ...) 项,选项#3(加入)将不起作用。

                【讨论】:

                  猜你喜欢
                  • 2021-05-01
                  • 2013-11-28
                  • 2022-01-25
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-02-10
                  • 2018-01-15
                  • 1970-01-01
                  • 2017-11-19
                  相关资源
                  最近更新 更多