javascript - 我的函数在将其转换为布尔值后不会删除“false”
问题描述
我试图创建一个函数,该函数在转换为布尔值时会删除所有“假”值,但由于某种原因,“假”项不会从数组中删除。
function bouncer(arr) {
let y = []
for (let i of arr) {
if (Boolean(i) == false) {
arr.splice(arr.indexOf(i), 1)
}
}
console.log(arr)
}
bouncer([7, "ate", "", false, 9]);
解决方案
迭代器(由 调用for..of
)是惰性的。他们不会在开始时创建要迭代的所有项目的集合。相反,在每次迭代开始时,它们递增要检查的索引,并在数组上查找该索引。
在这种情况下,在索引 2 上,''
错误的 被 删除splice
。拼接后的数组现在是:
[7, 'ate', false, 9]
然后,迭代器继续到索引 3,并检查9
. false
永远不会迭代。
改用.filter
:
const bouncer = arr => arr.filter(Boolean);
console.log(bouncer([7, "ate", "", false, 9]));
如果您必须就地改变数组,请向后迭代:
const bouncer = (arr) => {
for (let i = arr.length - 1; i >= 0; i--) {
if (!arr[i]) {
arr.splice(i, 1);
}
}
return arr;
};
console.log(bouncer([7, "ate", "", false, 9]));
推荐阅读
- css - 如何在 wordpress 中将“容器”类更改为“容器流体”类
- mysql - 使用mysql工作台创建表时出错
- package - Common Lisp 包 - 当包可能无法加载时如何处理?
- flutter - Flutter:是否可以在 main.dart 中实现一次快餐栏,例如,当连接状态发生变化时,用于所有屏幕
- python - DataError:没有数字类型可以聚合尝试对字母数字值进行排名
- ios - 使用 NSCalendar Swift 查找周日和周一
- c - 使用传递的参数返回指向函数的指针的函数
- c - ANSI 颜色代码删除 printf
- javascript - 为什么 VS Studio Code 会在输入时插入我不想要的代码?
- vb.net - 如何在自定义控件组合框中枚举 My.Setting.Connectionstring