gpt4 book ai didi

javascript - 为什么 switch 在 Javascript 数组的 for 循环中只运行一次?

转载 作者:行者123 更新时间:2023-11-28 12:14:40 25 4
gpt4 key购买 nike

我正在尝试编写一段 Javascript 代码,从给定数组中删除所有错误值。该代码适用于找到第一个负值,但不适用于后续的假值,就好像一旦运行 switch,整个 for 循环就被破坏了。

我的代码如下。

  function bouncer(arr) {
for(var i=0;i<arr.length; i++){

switch(arr[i]){
case false:
case null:
case 0:
case "":
case undefined:
case NaN: arr.splice(i,1); break;
}
}

return arr;
}

bouncer([7, "ate", false,"", 9]);

这是正常的开关行为吗?

最佳答案

splice 改变数组,当你迭代数组时,这不是一件好事;如果 i 处的项目被检测为 false 并被拼接,一旦 for 循环迭代结束,i将加一。因此,例如,如果 i2 开始,则 2 处的项目将被删除,那么位于 3 处的项目现在位于 2 处. 但是 2 处的 new 项永远不会被检查,因为 i 已增加到 3。

改用.filter,它会计算数组中的每个项目,并且不存在索引问题,也不需要手动迭代:

const bouncer = (arr) => arr.filter((item) => {
switch (item) {
case false:
case null:
case 0:
case "":
case undefined:
case NaN:
return false;
}
return true;
});

console.log(bouncer([7, "ate", false, "", 9]));

或者,当然,您可以检查每个项目是否错误:

const bouncer = (arr) => arr.filter(Boolean);

console.log(bouncer([7, "ate", false, "", 9]));

关于javascript - 为什么 switch 在 Javascript 数组的 for 循环中只运行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52140651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com