JavaScript数组的空值检查,无需迭代

3

你好,我有一个JavaScript数组,形如:[null,null,null,null]。如何在不遍历数组的情况下知道数组中所有的值是否都等于null?


3
在数组中搜索的时间复杂度为O(n)。 - dietbacon
3
避免迭代是不可能的。如果你自己不循环遍历数组,无论你调用什么方法都会这样做。你的目标是避免显式地自己循环吗?这是可以做到的。 - John Kugelman
是的,这就是我的目标。避免手动迭代。如果我这样做,代码看起来很丑。 - Aditya Kappagantula
甚至更简单的方法是在一行中完成整个迭代并进行检查。 for(x=0;x<array.length;x++) if(array[x] == null) counter++; 稍后,您可以放置if(counter == array.length),那么您就知道整个数组都是null。 - Brendan
1
@Brendan - 或者更好的方法是 for(var i = 0; i < arr.length; i++) if(array[i] !== null) allNull = false; - PitaJ
显示剩余2条评论
2个回答

6

无法检查所有null值,您必须对其进行迭代,或者您调用的函数必须在后台执行。然而,如果您愿意,可以使用本机数组方法filter来帮助您。

var allNull = !arr.filter(Boolean).length;

这将适用于任何假值,例如undefined、零、NaN或空字符串。更精确的形式是

var allNull = !arr.filter(function(elem){ return elem !== null; }).length;

可以使用以下方式检查是否为NULL

is_null()

另一种可能性是使用.join

var allNull = !arr.join("").length;

这个检查是否为nullundefined""


4

有多种内置方法能够辅助,其中之一是every方法,它可以测试所有的值是否都不为 null。如果第一个值为 null,则返回false

var noNulls = array.every(function(value){return value !== null});

另一个是some,它会在第一个空值处返回true

var hasNulls = array.some(function(value){return value === null});

“every”确实是一个有用的方法。我甚至都不记得它的存在了。 - PitaJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接