2016-04-14 186 views
2

如何检查数组是否有空元素? 想象该阵列中,检查数组是否有空元素

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? 
     } 
    } 
} 

我混淆了我该怎么做。请帮助我的聪明人。

+0

'如果(ARR [I] ==未定义)'这应该工作 – Bhumika107

+0

检查还空着!ARR [I] ===真正 –

+1

'然后?'? –

回答

10

由于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 
0

尝试

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

DEMO

var arr = [1,2]; 
 
arr[4] = 2; 
 

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

 
alert(hasAnyEmptyElement);

+0

'val ==“undefined”'? –

+0

工作不正常...我试过了。 – Juntae

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));

0

对于ES5-你可以做

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

即会返回false如果有undefined

ES2015检查includes

+0

也让我们知道'return true'的美妙之处 – Rayon

0

制作简单,你可以使用下面的对比达到同样。

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

你的代码说,如果并且只有在它不包含空字符串时才有空元素。 – Oriol

+0

是Oriol,我接受用户指的是要检查的字符文字。为了推广,我们可以用空关键字替换“”来检查我认为对所有类型都是通用的空值 – user6203759

+0

[空值](http://www.ecma-international.org/ecma-262/5.1/# sec-4.3.11)属于[空类型](http://www.ecma-international.org/ecma-262/5.1/#sec-4.3.12)。这不是通用的。 – Oriol

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]

-1

之间....

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

希望这会工作

+1

'typeof'永远不会返回''NULL'。 – Oriol

2

首先,请注意空槽和槽与不确定值之间的差异:

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