Array.reduce和一个奇怪的错误
当我阅读有关Javascript Array.reduce函数的博客时,我遇到了一个问题,代码是:
var res = str.split('') .reduce((pre, cur) => (pre[cur]++ || (pre[cur] = 1), pre), {});
我不知道为什么箭头函数有两个returnexpression式,换句话说,我认为应该是:
var res = str.split('') .reduce((pre, cur) => (pre[cur]++ || (pre[cur] = 1), {});
有什么不同? 然后我尝试重build该函数为:
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'?
你能回答我的两个问题吗?
这个
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; }, {});