今天主要应用了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]? 以及 || 符号?以及这段代码中最后的 {} 作用是什么?接下来一一解释:
- prev: prev是对象 (也就是object),初始化prev为{}, 也就是倒数第二行的声明;
- 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;
}
参考:
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects
- https://stackoverflow.com/questions/60586812/how-to-understand-objitem-objitem-1-in-javascript?noredirect=1#comment107187442_60586812