zoukankan      html  css  js  c++  java
  • 从reduce函数说起...

    reduce函数:  方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值, 最终返回的要看函数内部return的内容。

    1. 累加器:

    var arry = [1, 2, 3, 4];
     var result = arry.reduce(function (x, y) {
         return x + y;
    }, 0);

    result 结果值:10;

    x:上一次值(上一次的运行结果)

    y: 当前值 

    第一次: x 为空(第一次,没有上一次)   y 为 1(当前值)

    第二次:x为1(上一次的运行结果为1) 当前y为2

    第三,四次........

    可以理解为:((((null+1)+2)+3)+4)

    最后 函数的第二个参数0 是初始值 ,也就是函数的运行结果再加上0;

    像这种累加的操作,还有一个方法就是map函数: 对数组的每个元素调用定义的回调函数并返回包含结果的数组

    var arr = [1,2,3,4],
    sum = 0;
    arr.map(function(item){sum += item});//

    咋一看,这不就是forEach嘛。其实map和forEach主要的区别就是map函数可以返回一个新数组,如:

    var arr = [1,2,3,4],
    sum = 0;
    
    var result = arr.map(function(item){return item*item });

    result的值为[1,4,9,16]

    2. 复制数组

                var arry = [1, 2, 3, 4];
                var result = arry.reduce(function (arr, item) {
                    arr.push(item);
                    return arr;
                }, result);

    最后result的结果是:[1, 2, 3, 4]

    就是用arr每一次来push进来一个item.最终返回。

    稍微改一下这个方法,就可以实现下面的应用:

                var arr = [{ name: '4' }, { name: '5' }, { name: '6' }];
    
                var source  = ['1', '2', '3']; // 初始数组
    
                // 对象数组转为一维数组
                var result = arr.reduce(function (prev, item) {
                    prev.push(item.name);
                    return prev;
                }, source);
                
                console.dir(result);

    result的值为:['1', '2', '3','4', '5', '6'];

                var arr = [['3','4'],['5','6']];
    
                var source  = ['1', '2']; // 初始数组
    
                // 二维数组一维化
                var result = arr.reduce(function (prev, item) {
                    return prev.concat(item);
                }, source);
                
                console.dir(result);

    result的值为:['1', '2', '3','4', '5', '6'];

    当然复制数组,array也有更简单的方法:

    通过slice方法:该是通过参数start和end的传入值来返回数组中的一段,该方法不对原数组进行操作。我们通过slice(0)可以使其返回所有

    Array.prototype.clone=function(){ return this.slice(0); } 

    通过contact方法:通过和一个空函数的合并

    Array.prototype.clone=function(){ return [].concat(this); }   
  • 相关阅读:
    Android 4.0锁屏机制类之间的调用关系
    给盲目兴奋的程序员们的建议
    Hadoop相对于RDBMS、HPC、志愿计算的比较
    vmware7.1.14的vmware tools不支持opensuse12的解决过程
    集群的分类
    Suse linux和OpenSuse的区别和联系
    Apache Hadoop项目
    linux下安装JDK
    sudo的详细用法
    ubuntu和debian环境下vmware虚拟机共享目录无法挂载的问题解决办法
  • 原文地址:https://www.cnblogs.com/hankuikui/p/6963852.html
Copyright © 2011-2022 走看看