Array.reduce和一个奇怪的错误

时间:2016-10-24 07:39:41

标签: javascript node.js

我在阅读有关Javascript Array.reduce函数的博客时遇到了问题,代码是:

var res = str.split('')
         .reduce((pre, cur) => (pre[cur]++ || (pre[cur] = 1), pre), {});

我不知道为什么箭头功能有两个返回表达,换句话说,我认为它应该是:

var res = str.split('')
         .reduce((pre, cur) => (pre[cur]++ || (pre[cur] = 1), {});

有什么区别? 然后我尝试重建函数:

var res = str.split('')
        .reduce(function(pre,cur){
         console.log(pre) ;
         console.log(cur) ;
         if( pre[cur] === 1)
         {
          pre[cur]++;
         } else
           pre[cur] = 1;
        }, {});

但我再次收到错误,错误太奇怪了!!!:

             if( pre[cur] === 1)
                    ^

TypeError:无法读取未定义的属性“d”

什么?财产'd'?

你能否回答我的两个问题?

1 个答案:

答案 0 :(得分:1)

var res = str.split('')
     .reduce((pre, cur) => (pre[cur]++ || (pre[cur] = 1), pre), {});

等于

var res = str.split('')
     .reduce(function(pre, cur){
         if (!pre[cur]++) {
             pre[cur] = 1;
         }
         return pre;
     }, {});