gpt4 book ai didi

JavaScript 二进制归约函数 : why is 16 + 0 returning 0?

转载 作者:行者123 更新时间:2023-12-02 14:10:38 25 4
gpt4 key购买 nike

我正在尝试创建一个函数,它接受 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, index) => {
return sum + val === 1 ? enumerableBinaryMap[index] : 0;
}, 0);
}

sum([0, 0, 0, 1, 0, 0, 0, 1]); // 1, should be 17

当我到达二进制数数组中的第一个 1 时,就会出现问题。

例如,看看下面每次调用 reducer 时的值:

  1. 总和 = 0,val = 0,索引 = 0
  2. 总和 = 0,val = 0,索引 = 1
  3. 总和 = 0,val = 0,索引 = 2
  4. 总和 = 0,val = 1,索引 = 3
  5. 总和 = 16,val = 0,索引 = 4
  6. 总和 = 0,val = 0,索引 = 5 <--- BOOM!

正如您在上面看到的,reducer 中第五次调用的返回值是罪魁祸首。为什么第 6 次调用时 sum 等于 0?它应该仍然是 16,因为我们返回了 16 + 0?

我可以验证我的reduce 实现是否有效,因为下面的代码有效,并且它本质上与我正在做的事情相同:

[1, 2, 3, 4, 5].reduce((sum, val) => sum + val, 0); /// 15

有人知道这是怎么回事吗?

最佳答案

operator precedence的问题。您显示的代码被解释为

return (((sum + val) === 1) ? enumerableBinaryMap[index] : 0);

只要你想

return (sum + ((val === 1) ? enumerableBinaryMap[index] : 0));
// ^ ^

添加几个括号来修复它或使用

return val === 1 ? sum + enumerableBinaryMap[index] : sum;

关于JavaScript 二进制归约函数 : why is 16 + 0 returning 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39629346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com