2016-04-14 185 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