簡體   English   中英

有人可以逐步分解這個 function 並向我解釋它在做什么嗎?

[英]Can someone please breakdown this function step by step and explain me what it is doing?

nextElementsProduct 是一個adjacentElementsProduct ,它以一個數組作為輸入,我們需要找到並返回所有相鄰元素中乘積較大的相鄰元素。

 function adjacentElementsProduct(arr) { return Math.max(...arr.slice(1).map((x, i) => [x * arr[i]])) }

所以:

  1. arr.slice(1)返回數組中除第一個元素之外的所有元素
  2. .map((x,i)=>[x*arr[i]])將創建一個數組,將回調返回的所有內容推入其中,並且回調返回當前元素與arr[i]的乘積arr[i] ,因為在第 1 步中我們取出了第一個,所以arr[i]將是前一個(因此將類似於[[first number * second], [second * third], [third * fourth], ...] )
  3. ...result是擴展運算符,它將數組result的第一個元素作為第一個參數傳遞給Math.max ,第二個元素作為第二個參數...
  4. Math.max(...result)將只返回作為參數傳遞的元素的最大元素

在最后:

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
}

function 執行如下——

解釋 -

  • 它首先使用slice(1)創建原始數組的副本(請閱讀slice() ),基本上可以理解為 function 從原始數組創建一個新數組,並刪除第一個元素。

  • 然后,function 映射到新創建的數組。 在這里,map 在回調 function 中采用兩個參數,它們是

    1. x - 元素的
    2. i - 元素的索引
  • 重要的事情發生在這里:請注意,這里map正在返回一個數組,其中元素是x (這是我們新創建的數組的迭代中的當前元素)和arr[i] (這是索引i處的元素)的乘積我們的原始數組)。

    因此,本質上我們是在map()中的每個循環中將相鄰元素相乘,因為我們在創建副本數組時刪除了第一個元素。

  • 現在,正如我們所知,這個map()將返回一個元素數組,這些元素只不過是新創建的數組的每個元素xxarr[i]的乘積 如前所述,它只是所有相鄰元素的乘法數組。 該數組使用擴展運算符語法( ... ) 擴展為單獨的參數,然后傳遞給Math.max() ,它將返回相鄰乘法結果數組中所有元素的最大值。


示范 -

例如。 假設我們的原始數組是 -

[3,4,8,2,1]
  1. 現在,將發生的第一件事是創建一個新的數組副本,並刪除第一個元素。 所以, newArr = [4,8,2,1]

  2. 接下來,我們在這個數組上進行映射。 map()回調與兩個參數一起使用,第一個是值,第二個是當前它所在的索引。 因此,我們只是在整個newArr中進行映射,然后返回xarr[i]的乘積。 所以,它發生在 -

    • x = 4i = 0 - 在這里,我們將返回x*arr[i] = 4*arr[0] = 4*3 = 12

    • x = 8i = 1 - 我們再次返回x*arr[i] = 8*4 = 32

    • x = 2i = 2 - 我們再次返回x*arr[i] = 2*8 = 16

    • x = 1i = 3 - 我們再次返回x*arr[i] = 1*2 = 2

  3. 請注意,上面的 function 所做的只是計算原始數組中所有相鄰元素的乘積。

  4. 現在, map()返回我們計算的所有這些值的數組。 數組是 - [12,32,16,2] 該數組被拆分為離散參數並傳遞給Math.max() function,它將返回所有這些參數的最大值。

  5. 我們得到答案為Math.max(...[12,32,16,2]) = Math.max(12,32,16,2) = 32


 const myArr = [3,4,8,2,1]; function adjacentElementsProduct(arr) { return Math.max(...arr.slice(1).map((x, i) => [x * arr[i]])) // 1. Creates new array - [4,8,2,1] using arr.slice(1) // 2. uses map over array to iterate over all elements of newly created array // 3. map returns an array which is array containing product of adjacent element of original array // 4. The array will be expanded into arguments using spread operator // 5. Math.max will return the maximum of all these arguments (which are just the multiplication of all adjacent elements of our original array) } console.log(adjacentElementsProduct(myArr))


希望這能解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM