ES中reduce的⼀些⽤法记录
以前⼀直不怎么⽤reduce,⽤过之后觉得这个⽅法⾮常好,能优雅的解决⼀些困扰⼈的结果运算, rxjs中很多地⽅都有scan(跟reduce类似)⾝
影
MDN⽂档
js reduce的⼀些使⽤
reduce() ⽅法接收⼀个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终为⼀个值,是ES5中新增的⼜⼀个数组逐项处理⽅法,那reduce⽅法跟foreach、map等数组duce(callback[, initialValue]) — More From MDN
callback(⼀个在数组中每⼀项上调⽤的函数,接受四个函数:)
previousValue(上⼀次调⽤回调函数时的返回值,或者初始值)
currentValue(当前正在处理的数组元素)
currentIndex(当前正在处理的数组元素下标)
array(调⽤reduce()⽅法的数组)
initialValue(可选的初始值。作为第⼀次调⽤回调函数时传给previousValue的值)
另⼀些⾼级⽤法:www.jb51/article/132324.htm
1、求和
var arr=[1,2,3,4];
var duce((pre,cur)=>{
return pre+cur;
});
根据定义还可以传初始值
var duce((pre,cur)=>pre+cur,10);
2、计算对象数组的某字段最⼤值对象
var objArr=[
{"type":"java","count":10},
{"type":"c++","count":20},
{"type":"javascript","count":100},
{"type":"c#","count":10},
{"type":"python","count":30}
]
let duce((pre,cur)=>{
unt>cur?pre:cur;
});
/
/返回 {"type":"javascript","count":100}
3、特殊处理
以上⾯的对象数组为例,要求返回 var languages='java,c++,javascript,c# 和 python';
var duce((pre,cur,index,arr)=>{
if(index===0){ //第⼀项
return pe;
}else if(index=== arr.length-1){ //最后⼀项
return pre+' 和 '+pe;
}
return pre+','+pe
},''); //初始值是空字符串
4、⼀串字符串中每个字母出现的次数?
var arrString = 'abcdaabddcca';
arrString.split('').reduce(function (prev, curr) {
prev[curr] ? prev[curr]++ : prev[curr] = 1;
return prev;
}, []);
// [a: 4, b: 2, c: 3, d: 3]
typeof的用法//某个数在数组中出现的次数
const countOccurrences = (arr, value) => duce((a, v) => v === value ? a + 1 : a + 0, 0);
countOccurrences([1, 2, 3, 2, 2, 5, 1], 1);
//如果初始值换成对象
var arrString = 'abcdaabddcca';
arrString.split('').reduce(function (prev, curr) {
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论