JavaScript二进制reduce函数:为什么是16+;0返回0?

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

我正在尝试创建一个函数,它接受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时,问题就出现了

例如,请在下面查看减速机每次调用的值:

  • 总和=0,值=0,指数=0
  • 总和=0,值=0,索引=1
  • 总和=0,值=0,指数=2
  • 总和=0,值=1,指数=3
  • 总和=16,值=0,指数=4
  • sum=0,val=0,index=5是一个问题。您显示的代码被解释为

    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中的关联性。