JavaScript二进制reduce函数:为什么是16+;0返回0?
我正在尝试创建一个函数,它接受8位二进制,并给出和 我在做JavaScript二进制reduce函数:为什么是16+;0返回0?,javascript,binary,ecmascript-6,Javascript,Binary,Ecmascript 6,我正在尝试创建一个函数,它接受8位二进制,并给出和 我在做num+num时遇到困难 在reduce函数中,我创建一个和,并将转换为二进制的数字的值相加: const enumerableBinaryMap = { 0: 128, 1: 64, 2: 32, 3: 16, 4: 8, 5: 4, 6: 2, 7: 1 }; function sum (arr) { return arr.reduce((sum, val, i
num+num
时遇到困难
在reduce函数中,我创建一个和,并将转换为二进制的数字的值相加:
const enumerableBinaryMap = {
0: 128,
1: 64,
2: 32,
3: 16,
4: 8,
5: 4,
6: 2,
7: 1
};
function sum (arr) {
return arr.reduce((sum, val, index) => {
return sum + val === 1 ? enumerableBinaryMap[index] : 0;
}, 0);
}
sum([0, 0, 0, 1, 0, 0, 0, 1]); // 1, should be 17
当我得到二进制数数组中的第一个1时,问题就出现了
例如,请在下面查看减速机每次调用的值:
return (((sum + val) === 1) ? enumerableBinaryMap[index] : 0);
随你怎么想
return (sum + ((val === 1) ? enumerableBinaryMap[index] : 0));
// ^ ^
添加几个括号来修复它或使用
return val === 1 ? sum + enumerableBinaryMap[index] : sum;
这是一个问题。您显示的代码被解释为
return (((sum + val) === 1) ? enumerableBinaryMap[index] : 0);
随你怎么想
return (sum + ((val === 1) ? enumerableBinaryMap[index] : 0));
// ^ ^
添加几个括号来修复它或使用
return val === 1 ? sum + enumerableBinaryMap[index] : sum;
您需要将
sum
添加到reduce
中返回的内容中。是的,这是可行的,但为什么必须这样做?我在问题末尾展示的示例显示,仅返回sum
+某个任意数仍然会将其添加到返回值中,因此在这种情况下也不重要。reduce应该是return sum+(val==1?enumerableBinaryMap[index]:0)代码>嗯,好的,就是这么做的,所以问题一定是关联性。谢谢您需要将sum
添加到reduce
中返回的内容中。是的,这是可行的,但为什么必须这样做?我在问题末尾展示的示例显示,仅返回sum
+某个任意数仍然会将其添加到返回值中,因此在这种情况下也不重要。reduce应该是return sum+(val==1?enumerableBinaryMap[index]:0)代码>嗯,好的,就是这么做的,所以问题一定是关联性。谢谢谢谢你的解决方案。需要进一步研究JavaScript中的关联性。感谢您提供的解决方案。需要进一步研究JavaScript中的关联性。