JS 无法对数组项调用函数

我创建了一个函数来检查数组的元素是否可被下一项整除。如果不是,则应从数组中删除下一项。


我创建了一个由两个数组组成的测试数组。当我遍历它们并 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]


慕慕森
浏览 129回答 1
1回答

开满天机

不要忘记用“let”声明你的for循环变量。一旦添加了let,它就可以正常工作。(在 deleteItem 函数中也是如此)for(let i = 0; i < testArray.length; i++){&nbsp; &nbsp; &nbsp; console.log(testArray[i]);&nbsp; &nbsp; &nbsp; console.log(deleteItem(testArray[i]));}当您循环遍历您的 testArray 并输出每个元素时没有问题,但是在您的 deleteItem() 函数中,您有另一个带有名为“i”的变量的 for 循环,该变量未在本地声明。这意味着:您以全局 i = 0 开始 testArray 循环。然后调用 deleteItem 函数,该函数也将相同的全局 i 用于其 for 循环。所以在 deleteItem 函数完成后,全局 i 设置为 4,原来的 for 循环条件不再成立。这就是为什么不为您的第二个 testArray 元素调用 deleteItem 函数的原因。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript