gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:57:28 26 4
gpt4 key购买 nike

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

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”,所以它知道你正在迭代什么数组/列表。谢谢!

最佳答案

您需要测试元素 array[i],而不是索引,如有必要,稍后再进行测试。

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

你可以使用 Array#unshift而不是 Array#push并在最后省略 reversing。

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 循环和隐式检查的较短方法。

function evenNumbers(array, number) {
var newarr = [],
i = array.length;

while (i-- && newarr.length < number) {
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));

关于javascript - 为什么我要在要循环的数组之外获取返回元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53794714/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com