为了账号安全,请及时绑定邮箱和手机立即绑定

JS 无法对数组项调用函数

JS 无法对数组项调用函数

慕慕森 2022-10-08 17:31:14
我创建了一个函数来检查数组的元素是否可被下一项整除。如果不是,则应从数组中删除下一项。我创建了一个由两个数组组成的测试数组。当我遍历它们并 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 函数的原因。


查看完整回答
反对 回复 2022-10-08
  • 1 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号