Javascript 如何使用.splice删除falsy值?

Javascript 如何使用.splice删除falsy值?,javascript,arrays,Javascript,Arrays,我试图从数组中删除所有falsy值(false、null、0、“、未定义、NaN)。我的研究表明.filter()是实现这一点的正确方法,但我一直在尝试解决下面代码的问题,我不明白为什么。splice似乎只是在删除“”时,我希望它也删除false 目标是返回[7,“ate”,9],但当我得到[7,“ate”,false,9] function bouncer(arr) { for (i=0; i<arr.length; i++){ if (Boolean(arr[i]) ===

我试图从数组中删除所有falsy值(false、null、0、“、未定义、NaN)。我的研究表明.filter()是实现这一点的正确方法,但我一直在尝试解决下面代码的问题,我不明白为什么。splice似乎只是在删除“”时,我希望它也删除false

目标是返回[7,“ate”,9],但当我得到[7,“ate”,false,9]

function bouncer(arr) {
  for (i=0; i<arr.length; i++){
    if (Boolean(arr[i]) === false){
      arr.splice(i,1);
    }
  }
  return arr;
}
bouncer([7, "ate", "", false, 9]);
功能弹跳器(arr){
对于(i=0;i这里的问题是调用正在更改数组的
长度,因此在删除
后的下一次迭代中,
i
将指向最后一个元素并跳过
false
索引

如果您检查,您将看到:

描述

如果指定的要插入的图元数与 如果要删除的编号,则阵列在 通话结束

演示:

下面是一个演示,它记录了迭代的元素,并显示跳过了
false
值:

功能弹跳器(arr){
对于(变量i=0;i
这里的问题是调用正在更改数组的
长度,因此在删除
后的下一次迭代中,
i
将指向最后一个元素并跳过
false
索引

如果您检查,您将看到:

描述

如果指定的要插入的图元数与 如果要删除的编号,则阵列在 通话结束

演示:

下面是一个演示,它记录了迭代的元素,并显示跳过了
false
值:

功能弹跳器(arr){
对于(变量i=0;i保镖([7,“ate”,“false,9]);
您可以尝试以下方法:

功能弹跳器(arr){
var resultar=[];
var k=0;

对于(i=0;i您可以尝试以下方法:

功能弹跳器(arr){
var resultar=[];
var k=0;

对于(i=0;i,因为
Array.splice
正在修改数组的长度,因此
i
递增,但删除后的下一项实际上处于相同的
i
数值索引,因此它最终跳过移动到当前索引中的项

您可以尝试在删除项目时不增加i来协调这一点,也可以反向移动,因为上一个索引将始终保持为
i--

功能弹跳器(arr){
对于(变量i=arr.length-1;i>=0;i--){
if(布尔值(arr[i])==false){
阵列拼接(i,1);
}
}
返回arr;
}

console.log(bouncer([7,“ate”,“false,9]);
因为
Array.splice
正在修改数组的长度,所以
i
会增加,但删除后的下一项实际上处于相同的
i
数值索引,所以它会跳过移动到当前索引中的项

您可以尝试在删除项目时不增加i来协调这一点,也可以反向移动,因为上一个索引将始终保持为
i--

功能弹跳器(arr){
对于(变量i=arr.length-1;i>=0;i--){
if(布尔值(arr[i])==false){
阵列拼接(i,1);
}
}
返回arr;
}

console.log(bouncer([7,“ate”,false,9]);
[7,“ate”,false,9].filter(function(val){return!!val;})->[7,“ate”,9]
这同样有效:
[7,“ate”,false,9])。filter(function(val){return val;}
还有一个难以发现的问题:
for(i=0…
应该有
var
类似
for(VARI=0…
使其保持本地。
[7,“ate”,false,9]。过滤器(函数(val){return!!val;})->[7,“ate”,9]
这同样有效:
[7,“ate”,false,9]。过滤器(函数(val){return val;})
还有一个很难发现的问题:
for(i=0…
应该有
var
类似(var i=0…
以保持其本地性。不用担心,您已经获得了我的向上投票(跳过的好位置)。不用担心,您已经获得了我的向上投票(跳过的好位置)。