检查数组是否有空元素

时间:2016-04-14 11:44:04

标签: javascript

如何检查数组是否有空元素? 想象一下这个数组,

var arr = [ 'a', 'b', , 'd'];

arr [2]是undefined。我想检查一下。如果元素有空元素,则返回' true'或者返回false。也许是这样,

function hasEmptyElement(array){
    for (var i=0; i<array.length; i++){
        if (typeof arr[i] == 'undefined'){
          return true; 
          // and then ?
          // should I use double for loop or helper variable?
        }
    }
}

我很困惑如何做到这一点。请帮助我聪明人。

12 个答案:

答案 0 :(得分:23)

从ES2016开始,您应该使用Array.prototype.includes

const array = ["a", "b", , "d"];
array.includes(undefined); // true

(你不需要写undefined,但这会更清楚地说明发生了什么。)

请注意,此方法会将值undefined广告位的广告位视为相同,但它们并非如此。如果您需要区分这两种情况,从ES2017开始,如果数组中有空插槽,则可以使用Object.values制作以下表达式true

Object.values(array).length === array.length; // true

答案 1 :(得分:5)

首先,请注意空插槽与具有未定义值的插槽之间的区别:

var arr = [/*empty slot*/, undefined];
Object.keys(arr); // ["1"] but not "0"
"0" in arr; // false
"1" in arr; // true

ES5数组方法跳过空插槽。 ES6 [].includes没有。

这意味着您可以使用

arr.includes(undefined); // has empty slot OR contains undefined value
arr.indexOf(undefined) > -1; // contains undefined value

如果只想测试是否有空插槽,可以使用for循环手动迭代,并检查0和数组长度之间的所有索引是否存在,例如:与in运算符。

(function() {
  for(var i=0; i<arr.length; ++i) if(!(i in arr)) return true;
  return false;
})(); // has empty slot

或者您也可以使用ES5数组方法并检查它们是否跳过索引。

var n = 0;
arr.some((_,i) => i !== n++); // has empty slot

答案 2 :(得分:2)

你可以这样做:

function hasEmptyElement(array){
    for (var i=0; i<array.length; i++){
        if (!(i in array)) {
            return true;
        }
    }
    return false;
}

此实施的要点是它使[1,,3][1, undefined, 3]

之间存在差异

答案 3 :(得分:2)

使用set的简单实现

var arr = [ 'a', 'b', , 'd'];
// Using Set from es6
var arraySet = new Set(arr)
arraySet.has(undefined) // returns true

谢谢!

答案 4 :(得分:1)

您也可以使用Array.prototype.findIndex()

var arr = ['a', 'b', , 'd'];

document.write(arr.findIndex(e => e === undefined) > -1);

答案 5 :(得分:0)

var hasAnyEmptyElement = arr.filter(function(val){ return (typeof val) != "undefined" }).length != arr.length;

样本

&#13;
&#13;
var arr = [1,2];
arr[4] = 2;

var hasAnyEmptyElement = arr.filter(function(val){ return (typeof val) != "undefined" }).length != arr.length;

alert(hasAnyEmptyElement);
&#13;
&#13;
&#13;

答案 6 :(得分:0)

您可以尝试这样:

var arr = [ 'a', 'b',, 'd'];
function myfunc(arr) {
  for(var i=0; i<arr.length; i++) {
    if (!(i in arr)) return false;
  }
  return true;
}
alert( myfunc(arr));

答案 7 :(得分:0)

对于ES5-你可以做到

var arr = [ 'a', 'b', , 'd'];
arr.filter(function() { return true }).length === arr.length

如果有false

,那将会返回undefined

ES2015检查includes

答案 8 :(得分:0)

简单地说,您可以使用以下比较来实现相同的目标。

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

答案 9 :(得分:0)

var temp = arr.filter(item => item);

这将为您提供一个包含以下元素的新数组: ["a", "b", "d"]

上述解决方案将有助于删除空值和空值。

答案 10 :(得分:0)

`Check null/undefined values in Array`

function checkNullValue(a) {
                    if (typeof (a) == 'undefined' || a === null) {
                        return false;
                    } else {
                        return true;
                    }

     }

    var arrayMonthVal = ['1','2',,'6','null', '8'];

    var pass = arrayMonthVal.some(checkNullValue);

答案 11 :(得分:-1)

你好试试这个......

 if (typeof arr[i] == 'NULL'){
      return true; 
}

希望这可能有效