我在阅读有关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'?
你能否回答我的两个问题?
答案 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;
}, {});