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 = [, , , ];
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(); } 

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

Array.prototype.clone=function(){ return [].concat(this); }   

从reduce函数说起...的更多相关文章

  1. .Net转Java.01.从Main(main)函数说起

    在C#中,main函数的签名可以有四种 static void Main(string[] args)static void Main()static int Main(string[] args)s ...

  2. Hadoop学习:Map/Reduce初探与小Demo实现

    原文地址:https://blog.csdn.net/liyong199012/article/details/25423221 一.    概念知识介绍 Hadoop MapReduce是一个用于处 ...

  3. HIVE理论学习笔记

    概述 参加了新的公司新的工作新的环境之后,本人必须学习更多的知识,所以稳固之前的知识和学习新的知识是重中之重,新的公司把hadoop大部分的组件都进行了架构源码深度改造,所以使用过程确实遇到一些麻烦, ...

  4. 【原】AFNetworking源码阅读(三)

    [原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...

  5. 初识Hadoop

    第一部分:              初识Hadoop 一.             谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...

  6. js_继承

    一,js中对象继承 js中有三种继承方式 1.js原型(prototype)实现继承 复制代码代码如下: <SPAN style="<SPAN style="FONT- ...

  7. java异常面试题

    1.try{}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 也许你的答案是在return之前,但往更细地说, ...

  8. return和finally的执行和联系

    1.try{}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 也许你的答案是在return之前,但往更细地说, ...

  9. js中apply()和call()方法的使用

    1.apply()方法 apply方法能劫持另外一个对象的方法,继承另外一个对象的属性.  Function.apply(obj,args)方法能接收两个参数     obj:这个对象将代替Funct ...

随机推荐

  1. 爬虫实战【9】Selenium解析淘宝宝贝-获取宝贝信息并保存

    通过昨天的分析,我们已经能到依次打开多个页面了,接下来就是获取每个页面上宝贝的信息了. 分析页面宝贝信息 [插入图片,宝贝信息各项内容] 从图片上看,每个宝贝有如下信息:price,title,url ...

  2. 理解java集合——集合框架 Collection、Map

    1.概述: @white Java集合就像一种容器,可以把多个对象(实际上是对象的引用,但习惯上都称对象)"丢进"该容器中. 2.Java集合大致可以分4类: @white Set ...

  3. Go语言性能测试

    对于一些服务来说,性能是极其重要的一环,事关系统的吞吐.访问的延迟,进而影响用户的体验. 写性能测试在Go语言中是很便捷的,go自带的标准工具链就有完善的支持,下面我们来从Go的内部和系统调用方面来详 ...

  4. PHP中Trait详解及其应用

    w PHP中Trait详解及其应用 - 开发者日常 - SegmentFaulthttps://segmentfault.com/a/1190000008009455

  5. kafka-docker----(how to setup http proxy in container??)

    https://github.com/wurstmeister/kafka-docker environment: KAFKA_ADVERTISED_HOST_NAME: 10.10.160.243 ...

  6. python基础之类的进阶

    一.__setitem__,__getitem,__delitem__ #把对象操作属性模拟成字典的格式 class Foo: def __init__(self,name): self.name=n ...

  7. python基础之类的编码风格

    自定义工作流程: 一开始应让代码结构尽可能简单.先尽可能在一个文件中完成所有的工作,确定一切都能正确运行后,再将类移动独立的模块中.如果你喜欢模块和文件的交互方式,可在项目开始时就尝试将类存储到模块中 ...

  8. C++对象模型那点事儿(布局篇)

    1 前言 在C++中类的数据成员有两种:static和nonstatic.类的函数成员由三种:static,nonstatic和virtual. 上篇我们尽量说一些宏观上的东西,数据成员与函数成员在类 ...

  9. 初识ganglia

    本文地址:http://www.cnblogs.com/qiaoyihang/ 一.Ganglia是什么?Ganglia主要用来解决什么样的问题? ganglia是一个可扩展的分布式监控系统,用于监控 ...

  10. Linux开发工具教程

    今天把上个星期写的Linux开发工具相关的教程整理一下,方便阅读: 1.第一课 GCC入门: 2.第二课 GCC入门之静态库以及共享库: 3.第三课 Makefile文件的制作(上) : 4.第四课 ...