Js数组代替写循环的几个方法
简介
循环是个不可避免的结构,而且不好复用,同时循环还很难加入其他操作中。更麻烦的是,使用循环就意味着在每一个新的迭代中有更多变化需要响应。
上了循环的控制结构会使代码看起来变得复杂,故而这里提几个替代的函数,虽然函数内部实现肯定也用了循环,但是希望能使代码逻辑更为清晰。
假设有一个如下的数组我们需要对它进行一些操作
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数组代替写循环的几个方法的更多相关文章
- js数组和字符串去重复几种方法
js数组去重复几种方法 第一种:也是最笨的吧. Array.prototype.unique1 = function () { var r = new Array(); label:for(var i ...
- 三 基于Java数组手写循环队列
Code: package dataStucture2.stackandqueue; /** * 手写循环队列 * * @param <E> */ public class MyLoopQ ...
- js数组遍历的常用的几种方法以及差异和性能优化
<script type="text/javascript"> /*对比: 1.map速度比foreach快 2.map会返回一个新数组,不对原数组产生影响,forea ...
- JS数组中every(),filter(),forEach(),map(),some()方法学习笔记!
ES5中定义了五种数组的迭代方法:every(),filter(),forEach(),map(),some(). 每个方法都接受两个参数:要在每一项运行的函数(必选)和运行该函数的作用域的对象-影响 ...
- js 数组取出最大值最小值和平均值的方法
1.直接遍历数组 ,,,,,,,]; ]; ;i<arr.length;i++){ if(max<arr[i]) max=arr[i]; } 2.借用Math的方法 ,,,,,,,]; v ...
- 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 ...
- JS: 数组的循环函数
JS 数组相关的循环函数,用得挺多,所以有些坑还是要去踩一下,先来看一道面试题. 注意:下面提到的不改变原数组仅针对基本数据类型. 面试题 模拟实现数组的 map 函数. 心中有答案了吗?我的答案放在 ...
- JS 数组去重(数组元素是对象的情况)
js数组去重有经典的 几种方法 但当数组元素是对象时,就不能简单地比较了,需要以某种方式遍历各值再判断是否已出现. 因为: 1.如果是哈希判断法,对象作哈希表的下标,就会自动转换成字符型类型,从而导致 ...
- JS中for...in循环陷阱及遍历数组的方式对比
JavaScript中有很多遍历数组的方式,比较常见的是for(var i=0;i<arr.length;i++){},以及for...in...循环等,这些遍历都有各自的优缺点,下面来看看各种 ...
随机推荐
- youths |government|some
N-COUNT (新闻用语,尤指惹麻烦的)青年,小伙子Journalists often refer to young men as youths, especially when they are ...
- deeplearning.ai 序列模型 Week 2 NLP & Word Embeddings
1. Word representation One-hot representation的缺点:把每个单词独立对待,导致对相关词的泛化能力不强.比如训练出“I want a glass of ora ...
- python自动化测试之函数(匿名函数lambda和三目运算等(高级用法))
''' 匿名函数: lambda ''' def Add(a,b): print(a+b) Add(2,3) per = lambda a,b:a+b print(per(2,3)) ''' 三目运算 ...
- Golang Interface 解析
转自 https://zhuanlan.zhihu.com/p/27652856 先看一段代码: 123456789101112 func (x interface{}) { if x == nil ...
- jenkins使用(4)-发邮件
邮箱配置 邮件触发器:达到条件就会发邮件 对单独的服务设置邮件 系统设置如下 回到单个任务的设置 配置中的主题设置如下: 回到单个任务的设置 配置中如下: 选择工作空间中的一个文件 发送多个附件: 邮 ...
- 教你如何将txt复制到excel的各个单元格;并解决科学计数法显示问题及导致的个位数变0问题
1.如果你的txt或log等文件中的数据每个数据刚好都回车了,那么直接粘贴到excel即可: 2.如果你的txt或log等文件中数据较多,回车之后的每一行数据仍需再次分列,那么要求:每一行中需要分列的 ...
- Tortoises SVN 教程
1. TortoiseSVN 简介 版本控制是管理信息修改的艺术,它一直是程序员最重要的工具,程序员经常会花时间作出小的修改,然后又在某一天取消了这些修改,想象一下一个开发者并行工作的团队 - 或许 ...
- Linux命令alias - 设置命令的别名
用途说明设置命令的别名.在linux系统中如果命令太长又不符合用户的习惯,那么我们可以为它指定一个别名.虽然可以为命令建立“链接”解决长文件名的问题,但对于带命令行参数的命令,链接就无能为力了.而指定 ...
- etcd安装部署步骤
我是通过yum直接安装的(yum install etcd -y),其生成的配置文件在/etc/etcd/etcd.conf. 这里分单机版和集群版来介绍配置项 单机配置 ETCD_DATA_DIR: ...
- hexo博客的学习笔记
这篇文章主要的作用是作为 .md文件打开,内部的格式为一个初学者对hexo以及markdown语法运用的笔记 1.Hexo的写文格式 最开始为文章的属性部分,以三横杠-开始,-结束.里面记录了文章的标 ...