作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的代码应该删除错误值,但它只删除给定数组中的第一个错误值
const arr = [7, "ate", "", false, 9]
function bouncer(arr) {
for (let i = 0; i < arr.length; i++) {
if (!arr[i]) {
arr.splice(i, 1)
}
}
return arr;
}
console.log(bouncer(arr))
最佳答案
你不能像这样向上迭代和缩短你的数组; splice
具有修改原始数组的副作用。
考虑在 [false, false, true]
情况下会发生什么
i = 0
, length = 3
, arr = [(false), false, true]
-> arr 变为 [假,真]
i = 1
, length = 2
, arr = [false, (true)]
-> arr 保持 [false , 真]
(括号表示当前目标)
解决方案:
向下迭代,而不是向上迭代
for (let i = arr.length - 1; i >= 0; --i) if (!arr[i]) arr.splice(i, 1);
改用Array.prototype.filter
(这也会提高可读性)
arr = arr.filter((item) => !!item);
关于javascript - 我的代码应该删除所有错误值,但事实并非如此?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70914956/
我已经在 Ext-GWT 论坛上发布了这个问题,我只是希望这里有人可以为我解答! 我正在努力做一些我最初认为很简单的事情,但我开始相信这是不可能的...... 我有一个各种各样的“布局模板”——简单地
以下代码取自 a tutorial我得到了一个奇怪的结果。 IntSummaryStatistics ageSummary = persons .stream() .c
我是一名优秀的程序员,十分优秀!