Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有人能一步一步地分解这个功能并解释一下它在做什么吗?_Javascript_Arrays_Map Function - Fatal编程技术网

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
    }
    

    该函数执行如下-

    解释-
    • 它首先使用
      slice(1)
      (read about)创建原始数组的副本,这基本上可以理解为在删除第一个元素的情况下从原始数组创建新数组的函数

    • 然后,函数映射到新创建的数组上

    • 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(索引)从新创建的数组。