Javascript 有人能一步一步地分解这个功能并解释一下它在做什么吗?
Javascript 有人能一步一步地分解这个功能并解释一下它在做什么吗?,javascript,arrays,map-function,Javascript,Arrays,Map Function,AdjaceEntelementsProduct是一个以数组作为输入的函数,我们需要查找并返回相邻元素,其乘积在所有相邻元素中较大 函数邻接元素产品(arr){ 返回Math.max(…arr.slice(1).map((x,i)=>[x*arr[i]])) }因此: arr.slice(1)返回数组中除第一个元素以外的所有元素 .map((x,i)=>[x*arr[i]])将创建一个数组,将回调返回的所有内容推入其中,回调将返回当前元素与arr[i]的乘积,因为在步骤1中我们取出了第一个,a
AdjaceEntelementsProduct
是一个以数组作为输入的函数,我们需要查找并返回相邻元素,其乘积在所有相邻元素中较大
函数邻接元素产品(arr){
返回Math.max(…arr.slice(1).map((x,i)=>[x*arr[i]]))
}
因此:
arr.slice(1)
返回数组中除第一个元素以外的所有元素.map((x,i)=>[x*arr[i]])
将创建一个数组,将回调返回的所有内容推入其中,回调将返回当前元素与arr[i]
的乘积,因为在步骤1中我们取出了第一个,arr[i]
将是前一个(类似于[[第一个数字*第二个],[第二个*第三个],[第三个*第四个],…]
)…result
是扩展运算符,它将做的是将数组的第一个元素result
作为第一个参数传递给Math.max
,第二个元素作为第二个参数Math.max(…result)
将只返回作为参数传递的元素的max元素function adjacentElementsProduct(arr) {
let res = arr.slice(1); // every element except first
res = res.map((x,i)=>x*arr[i]) // array like [[first number of of arr * third number of arr], [third * fourth], ...]
return Math.max(...res) // max value of res
}
该函数执行如下- 解释-
- 它首先使用
(read about)创建原始数组的副本,这基本上可以理解为在删除第一个元素的情况下从原始数组创建新数组的函数slice(1)
- 然后,函数映射到新创建的数组上
-元素的值和x
-元素的索引i
- 这里发生了重要的事情:注意,这里返回的数组中的元素是
(这是我们新创建的数组迭代中的当前元素)和x
(这是原始数组中索引arr[i]
处的元素)的乘积 因此,本质上我们是将i
中的每个循环中的相邻元素相乘,因为我们在创建复制数组时删除了第一个元素map()
- 现在,我们知道,这个
将返回一个元素数组,它只不过是map()
和x
对于新创建数组的每个元素arr[i]的乘法
。如前所述,它只是所有相邻元素的乘法数组。该数组使用(x
)扩展为单独的参数,然后传递给该参数,该参数将返回相邻乘法结果数组中所有元素的最大值…
示范- 假设我们的原始数组是-
[3,4,8,2,1]
newArr=[4,8,2,1]
map()
回调与两个参数一起使用,第一个参数是值,第二个参数是它当前所在的索引。因此,我们只需在整个newArr
中进行映射,然后返回x
和arr[i]
的乘积。因此,它就像-
和x=4
-在这里,我们将返回i=0
=x*arr[i]
=4*arr[0]
=4*3
12
和x=8
-我们再次返回i=1
=x*arr[i]
=8*4
32
和x=2
-我们再次返回i=2
=x*arr[i]
=2*8
16
和x=1
-我们再次返回i=3
=x*arr[i]
=1*2
2
map()
返回我们计算的所有这些值的数组。数组是-[12,32,16,2]
。该数组被拆分为离散参数,并传递给Math.max()
函数,该函数将只返回所有这些值的最大值
Math.max(…[12,32,16,2])
=Math.max(12,32,16,2)
=32
constmyarr=[3,4,8,2,1];
函数邻接元素产品(arr){
返回Math.max(…arr.slice(1).map((x,i)=>[x*arr[i]]))
//1.使用arr.slice(1)创建新数组-[4,8,2,1]
//2.使用数组上的映射来迭代新创建数组的所有元素
//3.map返回一个数组,该数组包含原始数组相邻元素的乘积
//4.使用扩展运算符将数组扩展为参数
//5.Math.max将返回所有这些参数的最大值(即原始数组中所有相邻元素的乘积)
}
console.log(邻接元素产品(myArr))
这段代码到底有什么不清楚的地方?请参阅和MDN上关于和的文档。阅读关于您不了解的对象和方法的内容。感谢您的清除..解释得很好..我只是不清楚为什么要切片原始数组的第0个索引。我还以为map函数采用了i(索引)从新创建的数组。