javascript - 为什么我要在要循环的数组之外获取返回元素?
问题描述
给定一个数组,我试图将最后一个偶数返回到一个新数组中给定“数量”的项目,它还需要按原始顺序返回。我写了以下代码:
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
和省略倒车。
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 - 是否可以只输出 JSON 文件的“标题”而不输出它的内容?
- verilog - 有没有办法为实例化其他模块的模块创建一个verilog测试平台?
- python - top_k_accuracy_score() 给出形状不匹配错误:“y_true”(255)中的类数不等于“y_score”(269)中的类数
- java - 如何通过 unix soket 将 java 与 mariaDB localhost 连接?
- powershell - 如何使用 Invoke-Command 连接到 Exchange pssession?
- javascript - react-quill:[Parchment] 无法在反应应用程序中创建 [object HTMLDivElement] 印迹
- java - 使用 apache poi 根据列名将 CSV/XLSX 文件拆分为多个工作表
- vue.js - 路由器视图复制组件的问题
- python - 检查一个非常大的数字是否可以被 2 整除是错误的
- clickonce - MSIX 添加类似于 ClickOnce 的先决条件