JavaScript数组循环异常,中间位置连续输出多个'Yan'如何解决?
问题根因
- 核心错误是误用
indexOf()方法判断元素位置:indexOf()只会返回指定元素在数组中第一次出现的索引,你的reversValid1数组存在大量重复值(多个8、0、9、7),遍历到重复元素时,拿到的索引不是当前遍历的真实位置,判断逻辑完全失效,才会出现连续输出Yan的异常。 - 次要注意点:
reverse()方法会直接修改原数组,如果你后续还需要使用原valid1数组会出现意料外的问题,不过这个不是本次bug的核心诱因。
修复方案
直接使用遍历的当前索引i做位置判断即可,注意明确你说的「位置为偶数」的计数规则:
- 若你说的「位置偶数」是从1开始数的第2、4、6...位,对应索引1、3、5...,判断条件为
(i + 1) % 2 === 0 - 若你说的「位置偶数」是从0开始数的第0、2、4...位,对应普通计数的第1、3、5...位,判断条件为
i % 2 === 0
按照你描述的需求(位置偶数返回Yan,奇数返回原数字),修正后代码如下(示例默认位置从1开始计数,你可以按需调整判断条件):
const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8] // 扩展运算符拷贝原数组后反转,避免修改原valid1 const reversValid1 = [...valid1].reverse() const validateCard = (arr) =>{ for(let i = 0; i < arr.length; i++){ // 位置从1开始计数,偶数位输出Yan if((i + 1) % 2 === 0){ console.log('Yan') } else { console.log(arr[i]) } } } validateCard(reversValid1)
内容的提问来源于stack exchange,提问作者Jamal Fakhriddinov
相关产品推荐
相关产品推荐

