我正在尝试了解以下解决方案,以查找任何给定阵列中最大的相邻产品。
示例:
m43
JS中的可能解决方案:
For inputArray = [3, 6, -2, -5, 7, 3], the output should be
adjacentElementsProduct(inputArray) = 21.
7 and 3 produce the largest product.
我很难理解两件事:
三个点究竟做了什么以及如何将其传递到函数中?有没有办法以更容易理解的方式写这个?我知道这是ES6中的“扩展语法”功能,但仍然无法完全理解。
为什么我们插入“1”作为切片的参数?我的第一个是输入“0”,因为我们想从头开始,然后遍历所有内容,看看哪个相邻产品是最大的。
我很感激任何建议,链接和解释。
感谢。
干杯!
答案 0 :(得分:1)
var biggestProduct = inputArray[0] * inputArray[1];
for (i=0; i<inputArray.length-1 ; ++i)
{
console.log(biggestProduct)
if ((inputArray[i] * inputArray[i+1] ) > biggestProduct)
{
biggestProduct = inputArray[i] * inputArray[i+1]
}
}
return biggestProduct;
注意:我已经声明了一个变量,该变量包含2个具有索引号的输入数组,然后启动for循环,以其索引号指示输入数组,这样他就将抛出该数组的所有索引号(一个他们中的一个加起来,这样他们的价值就不会相同)。在代码末尾,您具有if语句。
答案 1 :(得分:0)
<强> 1。三个点究竟做了什么以及如何将其传递到函数中?有没有办法以更容易理解的方式写这个?我知道这是某种&#34;传播&#34; ES6中的功能,但仍然无法完全理解。
Math#max
需要一个数字列表作为参数,map会生成一个数组。 spread syntax用于将要扩展的数组转换为参数列表。
const arr = [1, 2, 3];
console.log('max on array', Math.max(arr));
console.log('max on list of parameters', Math.max(...arr));
&#13;
在这种情况下,您可以使用Function#apply
将数组转换为参数列表。然而,我发现它的可读性较差。
const arr = [1, 2, 3];
console.log(Math.max.apply(Math, arr));
&#13;
<强> 2。为什么我们插入&#34; 1&#34;作为切片的论据?我的第一个是输入&#34; 0&#34;,因为我们想从头开始,然后遍历所有内容,看看哪个相邻产品是最大的。
让我们分解2个数组的迭代顺序。
[3, 6, -2, -5, 7, 3] // inputArray
[6, -2, -5, 7, 3] // inputArray.slice(1)
现在每次inputArray.slice(1)
的迭代:
x: 6, i = 0, arr[0] = 3
x: -2, i = 1, arr[1] = 6
x: -5, i = 2, arr[2] = -2
由于inputArray.slice(1)
数组从inputArray
的第2个元素开始,因此索引(i
)指向inputArray
的第1个元素。结果是一组2个相邻数字的乘积。
答案 2 :(得分:0)
您可以按照以下步骤进行操作;
function getNeigboringMaxProduct([x,...xs], r = -Infinity){
var p = x * xs[0];
return xs.length ? getNeigboringMaxProduct(xs, p > r ? p : r)
: r;
}
var arr = [3, 6, -2, -5, 7, 3],
res = getNeigboringMaxProduct(arr);
console.log(res);
&#13;