为什么我在要循环的数组之外获取返回元素?

时间:2018-12-15 15:43:52

标签: javascript arrays for-loop reverse

给定一个数组,我试图返回最后一个偶数,直到新数组中给定的项目“给定数量”,它也需要按原始顺序返回。我已经编写了以下代码:

function evenNumbers(array, number) {
   let newarr = [];
   for (let i = array.length - 1; newarr.length < number; i-=1){
      if (i % 2 == 0){
         newarr.push(i);}}
   return newarr.reverse();}

因此,我尝试从给定数组的末尾开始,仅将偶数插入新数组,直到新数组给定长度的“数字”长度,然后以原始顺序返回它们。似乎工作正常,除了在少数情况下,它返回一个数组,该数组包含不在我要遍历的原始数组中的数字。我想念什么?

例如:evenNumbers([-22, 5, 3, 11, 26, -6, -7, -8, -9, -8, 26], 2)

在应返回[-8,26]时返回[8,10]

它正确返回偶数和我想要的偶数,但在给定数组中甚至不包括8和10。

我认为我的for循环设置正确。它从数组let i = array.length - 1;的末尾开始,一直持续到newarr.length < number;为真,并向后i-=1一次迭代一个步骤

我的后续问题是我的for循环如何知道要迭代的数组?我对javascript较新,因为我知道Python使用“ for i in array”,因此它知道要迭代的数组/列表。谢谢!

2 个答案:

答案 0 :(得分:1)

您需要测试元素Array ( [data] => Array ( [0] => Array ( [mailbox] => INBOX.Test.Sub Test Folder ) [1] => Array ( [mailbox] => INBOX.Junk ) [2] => Array ( [mailbox] => INBOX.Test ) [3] => Array ( [mailbox] => INBOX ) [4] => Array ( [mailbox] => INBOX.Drafts ) [5] => Array ( [mailbox] => INBOX.Trash ) ) ) ,而不是索引,然后在必要时对其进行测试。

然后,如果索引将为负数,则需要添加检查并停止迭代。

您可以使用Array#unshift而不是Array#push并在最后省略反转。

array[i]

具有function evenNumbers(array, number) { let newarr = []; for (let i = array.length - 1; newarr.length < number && i >= 0; i -= 1) { if (array[i] % 2 === 0) { newarr.unshift(array[i]); } } return newarr; } console.log(evenNumbers([-22, 5, 3, 11, 26, -6, -7, -8, -9, -8, 26], 2)); console.log(evenNumbers([], 2));循环和隐式检查的较短方法。

while

答案 1 :(得分:0)

function evenNumbers(array, number) {
   let newarr = [];
   for (let i = array.length - 1; newarr.length < number; i--){
      if (array[i] % 2 == 0){
         newarr.push(array[i]);}}
   return newarr.reverse();}

   const az = evenNumbers([-22, 5, 3, 11, 26, -6, -7, -8, -9, -8, 26], 2);


   console.log(az);