我正在CodeFights上玩耍,仍在学习JavaScript。我正在完成其基本挑战之一,但现在遇到了问题。
我并不想要解决方案,而是想要对我的代码出现了什么问题进行说明。代码的目的是简单地返回数组中任何两个相邻元素的最大乘积。我认为每次代码运行时,nextNum变量都会被设置为NaN,因为它是一个不存在的索引。我猜测我混淆了当NaN!= 1时为什么我的代码仍然将highestProduct更改为18,就我所知道,我也不知道18从哪里来,除非它开始再次循环。非常感谢您的帮助。
这是代码:
我并不想要解决方案,而是想要对我的代码出现了什么问题进行说明。代码的目的是简单地返回数组中任何两个相邻元素的最大乘积。我认为每次代码运行时,nextNum变量都会被设置为NaN,因为它是一个不存在的索引。我猜测我混淆了当NaN!= 1时为什么我的代码仍然将highestProduct更改为18,就我所知道,我也不知道18从哪里来,除非它开始再次循环。非常感谢您的帮助。
这是代码:
function adjacentElementsProduct(inputArray) {
let highestProduct;
inputArray.forEach(function(loopNum) {
let nextNum = inputArray.indexOf(loopNum) + 1;
let newProduct = inputArray[nextNum] * loopNum;
if (nextNum === 1) {
highestProduct = newProduct;
} else if (newProduct > highestProduct) {
highestProduct = newProduct;
}
console.log(highestProduct);
})
return highestProduct;
}
let testArr = [3, 6, -2, -5, 7, 3]
console.log(adjacentElementsProduct(testArr));
nextNum
永远不会是NaN
。它可能会超出范围(即最后一个索引 + 1),但在这种特殊情况下,也不会发生,因为数组中的第一个和最后一个元素相同,因此.indexOf(loopNum)
将返回数组中最后一个元素的0
(提示:对于最后一个元素,nextNum
将为1
)。 - Andreas