微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有人可以向我解释为什么这种语法使用括号而不是大括号,在reduce 方法中添加逗号而不是“返回”?

如何解决有人可以向我解释为什么这种语法使用括号而不是大括号,在reduce 方法中添加逗号而不是“返回”?

我有一个简单的问题,我认为它与换行符或其他问题有关,但我找不到答案或发布相关信息。这是使用 reduce() 方法的示例。

这就是我经常做或看到的:

const unique = ['a','b','c','a''a','a','b'];

unique.reduce((acc,val)=> {acc[val]=(acc[val]||0)+1; return acc;},{}); //{ a: 4,b: 2,c: 1 }

然而,我们也可以使用这种语法:去掉大括号 & return,使用圆括号代替,并在 , 之前添加一个 acc。有人可以向我解释这种语法吗?

unique.reduce((acc,val)=> (acc[val]=(acc[val]||0)+1,acc),{}); // { a: 4,c: 1 }


解决方法

这是因为您的示例中使用了逗号运算符。来自MDN:

逗号运算符 (,) 计算其每个操作数(从左到 right) 并返回最后一个操作数的值。

(acc[val]=(acc[val]||0)+1,acc) 中,逗号就是这样做的,它先处理左边部分,然后返回 acc

更新: 用大括号代替圆括号不起作用,因为它不符合 JS 箭头函数语法。来自 MDN 上的 Arrow function 文章:

如果正文需要额外的处理行,您需要 重新引入括号加上“返回”

所以 return 需要带大括号,而带括号的是一个简洁的箭头函数,不需要 return

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。