我正在使用CodeFights练习我的javascript,在完成练习后,我看到了这个功能:
// 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 :(得分:4)
FloatingActionButton
符号是一个按位二元运算符。
要了解会发生什么,您必须将每个项目转换为二进制。
&
实际上,每个偶数都将转换为0,每个奇数将转换为1。
如果我试图实现这一结果,我个人会使用模数运算符( | i (decimal) | i (binary) | i & 1 |
|-------------|------------|-------|
| 0 | 0 | 0 |
| 1 | 1 | 1 |
| 2 | 10 | 0 |
| 3 | 11 | 1 |
| 4 | 100 | 0 |
| 5 | 101 | 1 |
)
%
但那只是我。
<小时/> 另一部分是有两个用逗号分隔的语句:
p[i%2] += v;
那就是说“执行此操作,然后返回 (p[i&1]+=v,p)
。这是简写:
p
答案 1 :(得分:2)
它查找索引为p
的{{1}}数组元素 - 它是一个按位AND操作。然后,将其值增加i&1
变量的值。最后,返回v
变量的值。