[英]Can someone please explain to me what the “|” symbol is doing in Javascript?
[英]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]])) }
所以:
arr.slice(1)
返回數組中除第一個元素之外的所有元素.map((x,i)=>[x*arr[i]])
將創建一個數組,將回調返回的所有內容推入其中,並且回調返回當前元素與arr[i]
的乘積arr[i]
,因為在第 1 步中我們取出了第一個,所以arr[i]
將是前一個(因此將類似於[[first number * second], [second * third], [third * fourth], ...]
)...result
是擴展運算符,它將數組result
的第一個元素作為第一個參數傳遞給Math.max
,第二個元素作為第二個參數...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 中采用兩個參數,它們是
x
- 元素的值和i
- 元素的索引。 重要的事情發生在這里:請注意,這里map正在返回一個數組,其中元素是x
(這是我們新創建的數組的迭代中的當前元素)和arr[i]
(這是索引i
處的元素)的乘積我們的原始數組)。
因此,本質上我們是在map()
中的每個循環中將相鄰元素相乘,因為我們在創建副本數組時刪除了第一個元素。
現在,正如我們所知,這個map()
將返回一個元素數組,這些元素只不過是新創建的數組的每個元素x
的x
和arr[i]
的乘積。 如前所述,它只是所有相鄰元素的乘法數組。 該數組使用擴展運算符語法( ...
) 擴展為單獨的參數,然后傳遞給Math.max()
,它將返回相鄰乘法結果數組中所有元素的最大值。
例如。 假設我們的原始數組是 -
[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
。
請注意,上面的 function 所做的只是計算原始數組中所有相鄰元素的乘積。
現在, map()
返回我們計算的所有這些值的數組。 數組是 - [12,32,16,2]
。 該數組被拆分為離散參數並傳遞給Math.max()
function,它將返回所有這些參數的最大值。
我們得到答案為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.