如何理解JavaScript中obj[item] = (obj[item] +1 || 0)

今天主要应用了reduce(), 他的语法为:

arr.reduce(function(prev,cur,index,arr){
...
}, init);

其中:
arr 表示原数组;
prev 表示上一次调用回调时的返回值,或者初始值 init;
cur 表示当前正在处理的数组元素;
index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;
init 表示初始值。

在练习时碰到了它一个这样的应用:

统计一个数组中有多少个不重复的单词

var arr = ["apple","orange","apple","orange","pear","orange"]; 
function getWordCnt(){ 
  return arr.reduce(function(prev,next){ 
    prev[next] = (prev[next] + 1) || 1; 
    return prev; 
  },{}); 
} 
console.log(getWordCnt());//{apple: 2, orange: 3, pear: 1}

这段代码中,有一句话是核心,也是最容易产生困惑的地方:

 prev[next] = (prev[next] + 1) || 1; 

怎么理解prev? next? prev[next]? 以及 || 符号?以及这段代码中最后的 {} 作用是什么?接下来一一解释:

  1. prev: prev是对象 (也就是object),初始化prev为{}, 也就是倒数第二行的声明;
  2. next指 one of the array elements,也就是说,当reduce遍历到arr的[“apple”,“orange”]时,prev = { apple: 1 },这时候,
prev={
  "apple":1;
}

"orange"还没有,说明prev[next] 为false, 所以取 || 右边的值1,这时候prev就变成了

prev={
  "apple":1;
  "orange":1;
}

参考:

  1. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects
  2. https://stackoverflow.com/questions/60586812/how-to-understand-objitem-objitem-1-in-javascript?noredirect=1#comment107187442_60586812
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值