我创建了一个函数来检查数组的元素是否可被下一项整除。如果不是,则应从数组中删除下一项。我创建了一个由两个数组组成的测试数组。当我遍历它们并 console.log 它们时,它们会按预期返回。当我在 for 循环而不是 console.log 中调用我的函数 (deleteItem) 时,它只返回第一个数组元素的结果,而不是第二个。我真的很困惑,不明白这一点。谁能给我一个提示我做错了什么?先感谢您!let testArray = [[240,12, 10, 8,23],[240,12, 10, 8,24]];function deleteItem(array) { if(array.length<=1){ return array; } else{ for(i=0; i<array.length-1;i++) { let changed = true; while(changed){ if(array[i]%array[i+1]!=0) { array.splice(i+1,1); i=0; break; } else {changed=false}; } } } return array;}如果我只控制台日志,它会按预期返回两个元素:for(i=0;i<testArray.length;i++){ console.log( testArray[i]); //console.log(deleteItem( testArray[i]));}returns:[240, 12, 10, 8, 23][240, 12, 10, 8, 24]如果我使用我的函数,它只会调用第一个数组元素for(i=0;i<testArray.length;i++){ console.log( testArray[i]); console.log(deleteItem( testArray[i]));}returns:[240, 12, 10, 8, 23][240, 12]I expect:[240, 12, 10, 8, 23][240, 12][240, 12, 10, 8, 24][240, 12]
1 回答

开满天机
TA贡献1786条经验 获得超13个赞
不要忘记用“let”声明你的for循环变量。一旦添加了let,它就可以正常工作。(在 deleteItem 函数中也是如此)
for(let i = 0; i < testArray.length; i++){
console.log(testArray[i]);
console.log(deleteItem(testArray[i]));
}
当您循环遍历您的 testArray 并输出每个元素时没有问题,但是在您的 deleteItem() 函数中,您有另一个带有名为“i”的变量的 for 循环,该变量未在本地声明。
这意味着:您以全局 i = 0 开始 testArray 循环。然后调用 deleteItem 函数,该函数也将相同的全局 i 用于其 for 循环。所以在 deleteItem 函数完成后,全局 i 设置为 4,原来的 for 循环条件不再成立。这就是为什么不为您的第二个 testArray 元素调用 deleteItem 函数的原因。
添加回答
举报
0/150
提交
取消