为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript:查找相邻数组元素的乘积并返回最大的乘积

Javascript:查找相邻数组元素的乘积并返回最大的乘积

翻翻过去那场雪 2021-11-25 19:22:19
我正在努力提高我的 JS 技能并解决 CodeSignal 上的一些问题。我正在解决以下问题:给定一个整数数组,找到具有最大乘积的相邻元素对并返回该乘积。因此,例如,给定数组[2,3,5,10,2,4]我想要执行以下操作:2 * 3 = 65 * 10 = 502 * 4 = 8然后我想返回最大的产品,在这种情况下是 50。我的方法是使用 for 循环进行迭代,乘以 i * i + 1,将乘积推入一个新数组,然后将 for 循环增加 2,这样我就可以将数组中的下两个数字相乘。当我完成推入新数组时,我想使用Math.max并在数字数组上调用它以返回最大的乘积。Math.max 不适用于数组,因此我将使用 ES6 扩展运算符并执行以下操作: Math.max(...products);这是我到目前为止不起作用的内容:function adjacentElementsProduct(inputArray) {    var products = [];    for(var i = 0; i <= inputArray.length; i = i + 2) {        products.push(inputArray[i] * inputArray[i + 1]);    };     // Correctly logs elements of products array     console.log(products);     // NaN error     console.log(Math.max(...products));     return Math.max(...products);}此 NaN 错误是否与在 for 循环完成并将值推入数组之前尝试调用 Math.max 和扩展运算符有关?
查看完整描述

2 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

由于您将 2 添加到i然后查看iand i + 1,您真的只想在0and之间循环inputArray.length - 2。


鉴于您的示例代码,您可以通过更改for循环来解决此问题:


for(var i = 0; i <= inputArray.length - 2; i = i + 2) {

        products.push(inputArray[i] * inputArray[i + 1]);


};

让我们手动分解它,以便您可以看到它的实际效果:

  • i = 0我们的价值观是[2, 3]谁的产品6

  • i = 2我们的价值观是[5, 10]谁的产品50

  • i = 4我们的价值观是[2, 4]谁的产品8

此时我们的循环结束,因为inputArray.length - 2也等于4ie 6 - 2 === 4

您可能还需要包括不均匀的阵列进行检查,这样你就不会的产品最终n和 undefined。您可以通过在找到它们的产品之前检查值并忽略任何undefined包含的对来做到这一点。

为了更有趣,这里有一个递归版本的函数:

const adjacentElementsProduct = ([a, b, ...rest], agg = []) =>  rest.length 

? adjacentElementsProduct(rest, [...agg, a * b]) 

: Math.max(...agg);


查看完整回答
反对 回复 2021-11-25
?
慕村225694

TA贡献1880条经验 获得超4个赞

i <= inputArray.length应该是i < inputArray.length。数组索引从0array.length-1。当 时i == inputArray.length,您将两个undefined值相加,从而产生NaN.


查看完整回答
反对 回复 2021-11-25
  • 2 回答
  • 0 关注
  • 362 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信