我需要检查数组是否至少包含一个空元素。如果任何一个元素为空,则返回false。
例如:
例如:
var my_arr = new Array();
my_arr[0] = "";
my_arr[1] = " hi ";
my_arr[2] = "";
第0和第2个数组元素是“空的”。var my_arr = new Array();
my_arr[0] = "";
my_arr[1] = " hi ";
my_arr[2] = "";
第0和第2个数组元素是“空的”。您可以通过使用简单的 for
循环遍历数组来检查,如下所示:
function NoneEmpty(arr) {
for(var i=0; i<arr.length; i++) {
if(arr[i] === "") return false;
}
return true;
}
你可以在这里试一试,我们之所以没有使用.indexOf()
是因为IE不支持,否则它会更简单,像这样:
function NoneEmpty(arr) {
return arr.indexOf("") === -1;
}
但是遗憾的是,IE目前还不支持在数组上使用这个函数。
isEmpty
函数作为 HasEmpty
的第二个参数,并将 arr[i] === ""
实现作为默认值,那不是更好吗? - satoruindexOf
存在,您仍然可以使用它:var arrayHasEmpty = Array.prototype.indexOf ? function(arr) { return arr.indexOf("") != -1; } : function(arr) { /* for loop stuff here */ };
- Tim Down你需要通过循环进行检查。
function checkArray(my_arr){
for(var i=0;i<my_arr.length;i++){
if(my_arr[i] === "")
return false;
}
return true;
}
您可以尝试使用jQuery.inArray()函数:
return jQuery.inArray("", my_arr)
使用像"高阶函数"这样的函数,例如filter
,而不是循环,有时可以使代码更快、更安全、更易读。在这里,您可以过滤数组以删除不是空字符串的项,然后检查结果数组的长度。
基本JavaScript
var my_arr = ["", "hi", ""]
// only keep items that are the empty string
new_arr = my_arr.filter(function(item) {
return item === ""
})
// if filtered array is not empty, there are empty strings
console.log(new_arr);
console.log(new_arr.length === 0);
现代JavaScript:一行代码实现
var my_arr = ["", "hi", ""]
var result = my_arr.filter(item => item === "").length === 0
console.log(result);
关于性能的注意事项
在这种情况下,循环可能更快,因为可以在找到空字符串时立即停止循环。我可能仍然选择使用filter
来使代码简洁易读,但任何一种策略都是可辩解的。
然而,如果您需要遍历数组中的所有元素--也许是为了检查是否每个项都是空字符串--那么filter
通常比for循环快得多!
你可以为此编写一个简单的帮助方法:
function hasEmptyValues(ary) {
var l = ary.length,
i = 0;
for (i = 0; i < l; i += 1) {
if (!ary[i]) {
return false;
}
}
return true;
}
//check for empty
var isEmpty = hasEmptyValues(myArray);
编辑:这个检查包括false
、undefined
、NaN
、null
、""
和0
。
编辑2:误读了true/false的期望。
..fredrik
function containsEmpty(a) {
return [].concat(a).sort().reverse().pop() === "";
}
alert(containsEmpty(['1','','qwerty','100'])); // true
alert(containsEmpty(['1','2','qwerty','100'])); // false
my_arr.includes("")
这里返回的是undefined而不是布尔值,所以这里提供一种替代方案。
function checkEmptyString(item){
if (item.trim().length > 0) return false;
else return true;
};
function checkIfArrayContainsEmptyString(array) {
const containsEmptyString = array.some(checkEmptyString);
return containsEmptyString;
};
console.log(checkIfArrayContainsEmptyString(["","hey","","this","is","my","solution"]))
// *returns true*
console.log(checkIfArrayContainsEmptyString(["yay","it","works"]))
// *returns false*
yourArray.join('').length > 0
将数组连接在一起,中间不留任何空格,并检查其长度。如果长度大于零,则表示该数组不为空。如果长度小于或等于零,则表示该数组为空。
我在您的问题下面的评论中看到您提供的代码示例是PHP,所以我想知道您是否真的要使用PHP?在PHP中,它应该是这样的:
function hasEmpty($array)
{
foreach($array as $bit)
{
if(empty($bit)) return true;
}
return false;
}
$my_arr = array();
。*array()在ECMAScript/JavaScript中未定义,除非您自己定义它。array()*是PHP数组的构造函数。 - Andy E