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, 该方法倒序遍历数组.

  • 相关阅读:
    如何下载、安装、启动WebTours
    Jmeter--录制脚本-用户参数化-添加断言
    UTF-8与GBK的区别
    日志的等级
    程序员与英语
    遇到安装app不识别的情况
    苹果手机怎么追踪定位
    如何制作微信表情
    比美图还要简单的在线photoshop
    Mac 下 搭建 svn 服务器
  • 原文地址:https://www.cnblogs.com/idiv/p/8330502.html
Copyright © 2011-2022 走看看