从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 = [, , , ];
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函数说起...的更多相关文章
- .Net转Java.01.从Main(main)函数说起
在C#中,main函数的签名可以有四种 static void Main(string[] args)static void Main()static int Main(string[] args)s ...
- Hadoop学习:Map/Reduce初探与小Demo实现
原文地址:https://blog.csdn.net/liyong199012/article/details/25423221 一. 概念知识介绍 Hadoop MapReduce是一个用于处 ...
- HIVE理论学习笔记
概述 参加了新的公司新的工作新的环境之后,本人必须学习更多的知识,所以稳固之前的知识和学习新的知识是重中之重,新的公司把hadoop大部分的组件都进行了架构源码深度改造,所以使用过程确实遇到一些麻烦, ...
- 【原】AFNetworking源码阅读(三)
[原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...
- 初识Hadoop
第一部分: 初识Hadoop 一. 谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...
- js_继承
一,js中对象继承 js中有三种继承方式 1.js原型(prototype)实现继承 复制代码代码如下: <SPAN style="<SPAN style="FONT- ...
- java异常面试题
1.try{}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 也许你的答案是在return之前,但往更细地说, ...
- return和finally的执行和联系
1.try{}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 也许你的答案是在return之前,但往更细地说, ...
- js中apply()和call()方法的使用
1.apply()方法 apply方法能劫持另外一个对象的方法,继承另外一个对象的属性. Function.apply(obj,args)方法能接收两个参数 obj:这个对象将代替Funct ...
随机推荐
- tcp连接是基于socket通信的吗
https://zhidao.baidu.com/question/1305788160020716299.html ------ 网络七层协议 五层模型 TCP连接 HTTP连接 socket套接字 ...
- Spring MVC http请求地址映射(三)
Spring MVC框架通过扫描将带有@Controller的类中的@RequestMapping的方法进行映射,然后调用映射的方法处理请求,这个分发过程默认是由DispaterServlet处理的. ...
- Tickets---hdu1260(简单dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1260 题意是有n个人排队买票,第 i 个人买票所需要的时间是a[i],这个人和 i-1 或者 i+1 ...
- Linux学习笔记—vim程序编辑器
vi和vim vim是vi的升级版,支持vi的所有指令 vi的使用 vi分为三种模式:一般模式.编辑模式.命令行模式 一般模式 以vi打开一个文件就直接进入一般模式了,这个模式下可以使用上下左右按键来 ...
- mysql进阶(一)
本节目录 1.视图 2.存储过程 3.函数 4.事务 5.触发器 6.流程控制语句 1.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用 ...
- Java中String.valueOf、toString、(String)的区别
原文地址http://blog.csdn.net/yangzhaomuma/article/details/51173138 原文地址https://www.cnblogs.com/xhyouyou/ ...
- 【转】XML的几种读写
XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖于内 ...
- MySQL 表操作 (Day40)
阅读目录 一.表介绍 二.创建表 三.查看表 四.修改表 五.删除表 六.操作表中的记录 一.表介绍 表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,则称为表 ...
- Spring.Net依赖注入(属性注入)
一.前言: Spring.Net是Java开源框架迁移过来的,主要分为 1)依赖注入 2)面向方面编程 3)数据访问抽象 4)Asp.Net扩展 四个模块功能,这里只是简单介绍依赖注入模块功能. 对于 ...
- Oracle事务和锁机制
事务 1. 说明 一组SQL,一个逻辑工作单位,执行时整体修改或者整体回退. 2.事务相关概念 1)事务的提交和回滚:COMMIT/ROLLBACK 2)事务的开始和结束 开始事务:连接到数据库,执行 ...