zoukankan      html  css  js  c++  java
  • 数组方法之reduce实践

    Array.prototype.reduce

    let arr = [1, 2, 3, 4],
    	sum = arr.reduce((prev, curr, index, arr) => {
    		return prev + curr;
    	});
    ;
    console.log(sum);	// 10
    

    [].reduce 回调入参:

    1- prev 第一项的值或者是上一次的叠加的结果值(这个值可以手动设置)
    2- curr 当前会参与叠加的项
    3- index 当前的索引
    4- 数组本身

    上面例子的扩展-- 第n项之后的和:

    let arr = [1, 2, 3, 4],
    	sum = arr.reduce((prev, curr, index, arr) => {
    		if(index > 2) {
    			return prev + curr;
    		} else {
    			return prev;
    		}
    	}, 0);
    ;
    

    求成绩和

    var result = [
        {
            subject: 'math',
            score: 88
        },
        {
            subject: 'chinese',
            score: 95
        },
        {
            subject: 'english',
            score: 80
        }
    ];
    
    var sum = result.reduce((prev, curr) => {
    	return prev + curr.score;
    }, 0);
    

    加权成绩和

    var result = [
        {
            subject: 'math',
            score: 88
        },
        {
            subject: 'chinese',
            score: 95
        },
        {
            subject: 'english',
            score: 80
        }
    ];
    var dis = {
        math: 0.5,
        chinese: 0.3,
        english: 0.2
    };
    
    var qsum = result.reduce(function(prev, cur) {
        return cur.score * dis[cur.subject] + prev;
    }, 0);
    

    统计字符个数

    var arrString = 'sfaskdflaefaf';
    arrString.split('').reduce(function(res, cur) {
        res[cur] ? res[cur]++ : res[cur] = 1
        return res;
    }, {});
    

    字符去重

    var arrString = 'sfaskdflaefaf';
    arrString.split('').reduce((x => {
    	let res = {};
    	return (prev, curr) => {
    		if(!res[curr]) {
    			res[curr] = true;
    			return prev + curr;
    		}
    		return prev;
    	};
    })(), '');
    

    字符串反转:

    var str = 'sfaskdflaefaf';
    str.split('').reduce((prev, curr) => {
    	return curr + prev;
    }, '');
    

    按一定规则转换数组:

    [1, 2].reduce(function(res, cur) { 
        res.push(cur + 1); 
        return res; 
    }, []);
    

    小结: 一般我们会提供 prev 的默认值来获得期望的返回, 这个方法可以在满足一定规则的逻辑下让代码书写的更为优雅, 与之相似的另外一个方法是 reduceRight, 该方法倒序遍历数组.

  • 相关阅读:
    黑板客爬虫闯关 代码
    新浪云SAE搭建python环境 问题拾遗
    关于python中的字符串编码理解
    linux环境中使用转义字符使命令行字符颜色高亮
    python中list作为全局变量无需global声明的原因
    获取youku视频下载链接(wireshark抓包分析)
    改变linux默认配色方案(dircolors和dircolors-solarized使用)
    限流常规设计和实例
    连接池-Mybatis源码
    Transaction-Mybatis源码
  • 原文地址:https://www.cnblogs.com/idiv/p/8330502.html
Copyright © 2011-2022 走看看