创建新索引数组遇问题:indexFinder函数无法正常运行求助
嘿,我瞅见你的代码里有俩关键问题导致它跑不起来,咱们挨个来掰扯清楚并修复:
问题1:循环条件写错了,直接搞成无限循环了
你原来的循环是这么写的:
for(var i = 0; arr.length; i++)
这里的终止条件是arr.length——只要你的数组长度大于0,这个条件就永远是true,循环会一直跑下去停不下来,浏览器都得给你卡崩。正确的条件应该是判断i是否小于数组长度:i < arr.length,这样当i增长到和数组长度一样时,循环就会乖乖终止。
问题2:全局变量indexes导致数据污染
你把indexes定义在函数外面,每次调用indexFinder都会往同一个数组里加东西,而且如果多次调用的话,旧的索引也会留在里面。更合理的做法是把索引数组的创建放到函数内部,让函数自己生成并返回属于当前输入数组的索引数组,这样函数是独立的,不会受外部变量影响。
修复后的完整代码
下面是修正后的版本,既能实现需求,又更健壮:
let randomNumbers = [1, 3453, 34, 456, 32, 3, 2, 0]; function indexFinder(arr) { // 在函数内部创建索引数组,避免全局污染 let indexes = []; // 修正循环条件 for (let i = 0; i < arr.length; i++) { indexes.push(i); } return indexes; } // 调用函数并把结果赋值给indexes变量 let indexes = indexFinder(randomNumbers); console.log(indexes); // 输出: [0, 1, 2, 3, 4, 5, 6, 7]
更简洁的写法(可选)
如果你想让代码更简洁,还可以用JS的数组方法来实现,比如map或者Array.from:
- 用
map:遍历数组时直接返回每个元素的索引
function indexFinder(arr) { return arr.map((_, idx) => idx); }
- 用
Array.from:直接根据数组长度生成索引数组
function indexFinder(arr) { return Array.from({ length: arr.length }, (_, i) => i); }
这两种写法和for循环的效果完全一样,但代码更短,可读性也不错。
内容的提问来源于stack exchange,提问作者PBandJ333
相关产品推荐
相关产品推荐

