简介

循环是个不可避免的结构,而且不好复用,同时循环还很难加入其他操作中。更麻烦的是,使用循环就意味着在每一个新的迭代中有更多变化需要响应。

上了循环的控制结构会使代码看起来变得复杂,故而这里提几个替代的函数,虽然函数内部实现肯定也用了循环,但是希望能使代码逻辑更为清晰。

假设有一个如下的数组我们需要对它进行一些操作

var list = [
{
name: 'Zhao',
age: 22,
cash: 1000
},
{
name: 'Qian',
age: 26,
cash: 5000
},
{
name: 'Sun',
age: 17,
cash: 300
},
{
name: 'Li',
age: 30,
cash: 9000
}
];

map

让原数组通过某种计算产生一个新数组,新数组顺序对应原数组。

比如说希望得到所有人名字的数组,原先forEach遍历的时候得这么写

const name = [];
list.forEach((v, k) => {
name.push(v.name);
});
console.log(name);

因为for循环里的逻辑非常难拆分,为了写的逻辑更清晰些,于是改用map函数

var names = list.map(item => {
return item.name
}); console.log(names); //["Zhao", "Qian", "Sun", "Li"]

some

该方法对数组中的每一项运行给定函数,如果该函数对任何一项返回 true,则返回true。

比如说这里希望得到一个布尔值结果得知是否有人未成年.

var hasYoungMan = list.some(item => {
if (item.age < 18) {
return true;
}
return false;
});
console.log(hasYoungMan); //true

every

该方法对数组中的每一项运行给定函数,如果该函数对每一项都返回 true,则返回true。

比如说这里我们希望得知是否所有人都是成年人。

var IsAllYoungMan = list.every(item => {
if (item.age > 18) {
return true;
}
return false;
});
console.log(IsAllYoungMan); //false

reduce

归并方法。这两个方法都会迭代数组中的所有项,然后生成一个最终返回值。

如果希望得到所有人的现金之和

var cashSum = list.reduce((previousValue, currentIterator, index, arr) => {
return previousValue + currentIterator.cash;
}, 0);
console.log(cashSum); //15300

或者统计所有现金超过三位数的人

var count = list.reduce((previousValue, currentIterator, index, arr) => {
return currentIterator.cash >= 1000 ? previousValue + 1 : previousValue;
}, 0);
console.log(count); //3

filter

该方法对数组中的每一项运行给定函数,返回该函数会return true 的项组成的新数组。利用这个方法可对数组元素进行过滤筛选。

如果希望筛选出年龄大于20的人数组

var adultList = list.filter((item, index, arr) => {
return item.age >= 18 ? true : false;
}, 0);
console.log(JSON.stringify(adultList)); //[{"name":"Zhao","age":22,"cash":1000},{"name":"Qian","age":26,"cash":5000},{"name":"Li","age":30,"cash":9000}]

Js数组代替写循环的几个方法的更多相关文章

  1. js数组和字符串去重复几种方法

    js数组去重复几种方法 第一种:也是最笨的吧. Array.prototype.unique1 = function () { var r = new Array(); label:for(var i ...

  2. 三 基于Java数组手写循环队列

    Code: package dataStucture2.stackandqueue; /** * 手写循环队列 * * @param <E> */ public class MyLoopQ ...

  3. js数组遍历的常用的几种方法以及差异和性能优化

    <script type="text/javascript"> /*对比: 1.map速度比foreach快 2.map会返回一个新数组,不对原数组产生影响,forea ...

  4. JS数组中every(),filter(),forEach(),map(),some()方法学习笔记!

    ES5中定义了五种数组的迭代方法:every(),filter(),forEach(),map(),some(). 每个方法都接受两个参数:要在每一项运行的函数(必选)和运行该函数的作用域的对象-影响 ...

  5. js 数组取出最大值最小值和平均值的方法

    1.直接遍历数组 ,,,,,,,]; ]; ;i<arr.length;i++){ if(max<arr[i]) max=arr[i]; } 2.借用Math的方法 ,,,,,,,]; v ...

  6. Js数组的map,filter,reduce,every,some方法

    var arr=[1,2,3,4,5,6]; res = arr.map(function(x){return x*x}) [1, 4, 9, 16, 25, 36] res = arr.filter ...

  7. JS: 数组的循环函数

    JS 数组相关的循环函数,用得挺多,所以有些坑还是要去踩一下,先来看一道面试题. 注意:下面提到的不改变原数组仅针对基本数据类型. 面试题 模拟实现数组的 map 函数. 心中有答案了吗?我的答案放在 ...

  8. JS 数组去重(数组元素是对象的情况)

    js数组去重有经典的 几种方法 但当数组元素是对象时,就不能简单地比较了,需要以某种方式遍历各值再判断是否已出现. 因为: 1.如果是哈希判断法,对象作哈希表的下标,就会自动转换成字符型类型,从而导致 ...

  9. JS中for...in循环陷阱及遍历数组的方式对比

    JavaScript中有很多遍历数组的方式,比较常见的是for(var i=0;i<arr.length;i++){},以及for...in...循环等,这些遍历都有各自的优缺点,下面来看看各种 ...

随机推荐

  1. 2010提高组-C]关押罪犯(扩展域并查集

    题:https://www.cometoj.com/problem/0073 #include<bits/stdc++.h> using namespace std; ; struct n ...

  2. SpringBoot:Shiro 整合 Redis

    前言 前段时间做了一个图床的小项目,安全框架使用的是Shiro.为了使用户7x24小时访问,决定把项目由单机升级为集群部署架构.但是安全框架shiro只有单机存储的SessionDao,尽管Shrio ...

  3. spring boot原理分析启动依赖中parent帮我们干了什么

    主要内容: 1:分析spring-boot-starter-parent 这个依赖 通过前面几篇文章的学习,我们感受到了spring boot的魅力.最明显的感觉就是pom.xml文件.代码少了很多. ...

  4. 方差分析|残差|MSA/MSE|Completely randomized design|Randomized block design|LSD|主效应|intercept|多重比较|

    符合方差分析的三个条件: 残差=实际值-预测值(其实是均值). 在原假设下,MSA的期望会等于MSE的期望:在备选假设下,MSA的期望会大于MSE的期望,所以MSA/MSE的取值范围在(1,正无穷), ...

  5. Nginx笔记总结十五:nginx+keepalive+proxy_cache配置高可用nginx集群和高速缓存

    nginx编译 wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz ./configure --prefix=/usr/loca ...

  6. 数位dp对于状态描述与发现的一些感悟

    今天刷的数位dp 第一题看了题解以后知道了数位dp的基本板子,写数位dp的方式(运用记忆化递归的方法)已经基本固定. 那么接下来的难点主要还是对于题目描述的问题,如何抽象成dp中的状态.就今天刷的题来 ...

  7. 【转载】python3安装scrapy之windows32位爬坑

    python3安装scrapy之windows32位爬坑 原创 2016年11月06日 01:38:08 标签: scrapy / windows / python / 开源框架 / 网络爬虫   早 ...

  8. 关于CLOSE BY CLIENT STACK TRACE

    关于CLOSE BY CLIENT STACK TRACE 程序正常运行,数据库连接可以获取,一些列操作都可以实现,可在debug信息中总会一段时间就报如下错误: java.lang.Exceptio ...

  9. linux查看端口号占用命令-top

    题记 对于top命令来说,基本是都是linux命令入门中,第一个使用的命令,在windows中电脑如果卡顿,回去任务栏中查看cpu和内存的使用情况.top命令实现的就是这个重要的功能. 在系统维护的过 ...

  10. 面试的绝招(V1.0)

    <软件自动化测试开发>出版了 测试开发公开课培训大讲堂 微信公众号:测试开发社区 测试开发QQ群:173172133 咨询QQ:7980068 咨询微信:zouhui1003it