2017-05-06 288 views
0

我在練習我的CodeFights javascript和我完成一個練習,我看到這個函數的結果:表達式`p [i&1] + = v,p`是什麼意思?

// Subject : 
// Several people are standing in a row and need to be divided into two teams. 
// The first person goes into team 1, the second goes into team 2, 
// the third goes into team 1 again, the fourth into team 2, and so on. 
// You are given an array of positive integers - the weights of the people. 
// Return an array of two integers, where the first element is the total weight of 
// team 1, and the second element is the total weight of team 2 
// after the division is complete. 

// Example : 
// For a = [50, 60, 60, 45, 70], the output should be 
// alternatingSums(a) = [180, 105]. 

// answer 
alternatingSums = a => a.reduce((p,v,i) => (p[i&1]+=v,p), [0,0]) 

我不明白p[i&1]+=v,p手段。

+0

'P&1對於奇數和偶數的p,它在0和1之間變化(它只能看到0位的數值爲1的位),它正是名字和註釋所說的內容,它總結了第二個位置。 – eckes

回答

2

&符號是一個按位二進制運算符。

要理解會發生什麼,您必須將每個項目轉換爲二進制。

| i (decimal) | i (binary) | i & 1 | 
    |-------------|------------|-------| 
    |   0 |   0 |  0 | 
    |   1 |   1 |  1 | 
    |   2 |   10 |  0 | 
    |   3 |   11 |  1 | 
    |   4 |  100 |  0 | 
    |   5 |  101 |  1 | 

實際上,每個偶數將被改造爲0,如果我想實現這一結果每個奇數將會轉化成1

,我個人會用取模運算符( %

p[i%2] += v; 

但這就是我。


另一部分是有由逗號分隔的兩個語句:

(p[i&1]+=v,p) 

這是說「執行這個動作,然後返回p這是簡寫:

alternatingSums = a => a.reduce((p,v,i) => { 
               p[i&1]+=v; 
               return p; 
              }, 
           [0,0]) 
2

它尋找索引爲i&1p數組的元素 - 這是一個按位與操作。然後,將其值增加v變量的值。最後,返回變量值p

相關問題