为什么这对每个falsy but null都有效?
function bouncer(arr) {
for(let i = 0; i < arr.length; i++){
if(!arr[i]){
arr.splice(i,1);
i = 0;
}
}
console.log(arr);
}
bouncer([false, null, 0, NaN, undefined, ""])
为什么这对每个falsy but null都有效?
function bouncer(arr) {
for(let i = 0; i < arr.length; i++){
if(!arr[i]){
arr.splice(i,1);
i = 0;
}
}
console.log(arr);
}
bouncer([false, null, 0, NaN, undefined, ""])
5条答案
按热度按时间du7egjpx1#
因为在
for
循环中出现的最后一个表达式,这里的i++
,总是在循环体之后执行。所以,给定当前逻辑,无论输入数组是什么,i
只在第一次迭代期间在循环体的开始处是0
:您可以将
i
重置为-1
,导致i++
在下一个循环体开始时将i
转换为0
:或者,当然,使用
.filter
代替,.filter
更容易推理:8xiog9wr2#
或者你可以用
egdjgwm83#
只是为了给CertaintPerformance给出的答案添加更多内容,您还可以在循环体中处理
i
的增量,如下所示:zvokhttg4#
arr.splice(i,1),这里的i和外部循环的值相同。所以赋值给它0没有帮助。另外你需要从i中减去1:arr.splice(i--,1),以便不会跳过向下移动的条目。
ac1kyiln5#
每个值都将被视为布尔值,如果该值是真值,则将选择该值,如果该值被错误地拒绝。