使用Array.indexOf如何从数组中删除空值?

4
我正在尝试查找我的数组中是否有空值,而不使用for循环,主要类似于Array.indexOf的方法。undefined不是一个字符串,它是一个空值,在使用console.log(ARRPREFIX)时会显示为undefined。

var arr = ["**", undefined, null];
if (arr.indexOf(null) > -1) {
  console.log("Should be null");
  arr.splice(arr.indexOf(null), 1);
}

以下是我的代码,但它无法检测到未定义的值,我也尝试了用"undefined"代替,但那也不起作用。

3
nullundefined"undefined" 的意思是:nullundefined和字符串"undefined"是不同的概念,它们不应混为一谈。 - str
1
你没有“未定义的值”,你有一个字符串,其中包含字符undefined。它与未定义的距离可以说是天壤之别。 - Jamiec
1
未定义并不是实际的字符串未定义,而是当我使用console.log(ARRPREFIX)打印数组时出现为null值的undefined。 - Mad_ Questionnaire
只需使用 arr.filter(Boolean),它将删除假值。 - abhishekkannojia
2个回答

8
您可以使用filter来过滤掉假值(null、undefined等):

var array = [2, 3, null, 4, undefined, 5];
array = array.filter(Boolean);

console.log(array);


undefined 是什么意思? - abhishekkannojia
你是否注意到未定义的并不是实际的“undefined”? - Jamiec
我考虑的是未定义,而不是“undefined”。如果你想过滤掉字符串“undefined”,只需要调整过滤器即可。 - Alberto Trindade Tavares
1
你可以通过删除内部函数来缩短它:array.filter(Boolean) - abhishekkannojia
@abhishekkannojia 很好的建议!我刚刚编辑了我的答案,使用了这个。 - Alberto Trindade Tavares
显示剩余5条评论

-2

我认为那些 JavaScript 数组函数无论如何都会使用循环。


问题是我不想循环遍历整个数组并删除 null/undefined 值,因为随着时间的推移它会变得更大,所以 for 循环就行不通了。 - Mad_ Questionnaire
这些函数无论如何都会被执行,你认为数组函数是如何工作的呢?你不能在不循环数组的情况下获取它的值。Index of 也会做这件事... - azurinko

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