JavaScript使用indexOf筛选数组奇数位置元素跳过重复7是什么原因
问题原因
你代码的核心问题是误用了indexOf()方法导致判断逻辑错误。Array.indexOf()的作用是返回指定元素在数组中第一次出现的索引,你用它的返回值做奇偶判断,本质上是在判断「当前元素第一次出现在数组里的位置是不是奇数」,而不是你需要的「当前正在遍历的元素的位置是不是奇数」。
你遇到的7被跳过就是这个原因:数组里有两个值为7的元素,分别在索引5和索引6的位置。当遍历到这两个元素时,serialDigits.indexOf(7)永远返回第一个7的索引5,哪怕你遍历的是第二个位于索引6的7,也不会识别到它的实际位置。不止是7,数组里的9、0、8、6这些重复元素都会遇到同样的判断失准问题。
修复方案
直接用遍历计数器i做奇偶判断即可,如果你需要的是索引(从0开始计数)为奇数的位置,判断条件写i % 2 === 1即可;如果你需要的是日常计数的第1、3、5位(对应索引为偶数),调整为i % 2 === 0就行。
修复后的代码参考:
const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8]; const validateCred = (serialDigits)=>{ for (let i = serialDigits.length - 1; i >= 0; i--){ let currentDigit = serialDigits[i]; // 可根据你对奇数位置的定义调整判断条件 if(i % 2 === 1){ console.log(currentDigit) }; } } validateCred(valid1);
内容的提问来源于stack exchange,提问作者Ikenna
相关产品推荐
相关产品推荐

