如何检查数组是否有空元素? 想象一下这个数组,
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 :(得分: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;
样本
var arr = [1,2];
arr[4] = 2;
var hasAnyEmptyElement = arr.filter(function(val){ return (typeof val) != "undefined" }).length != arr.length;
alert(hasAnyEmptyElement);
&#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;
}
希望这可能有效