ES6-map、filter、find、findIndex讲解
map方法:可以简单的理解为映射
var arr=[1,2,3,4];
console.log( arr.map((n)=>n*n) );//[1, 4, 9, 16]
console.log( arr.map((n)=>n-1) );//[0, 1, 2, 3]
从数组[1,4,-5,10]当中给我找出小于0的数字。在你看到这里的时候相信你也是对箭头函数了解,(n)=>n*n 就不用赘述了。
filter方法:
var users = [
{name: "张含韵", "email": "zhang@email.com"},
{name: "江一燕", "email": "jiang@email.com"},
{name: "李小璐", "email": "li@email.com"}
];
//获取所有人的email
var emails=users.map(user=>user.email)
console.log(emails.join(',')) //"zhang@email.com", "jiang@email.com", "li@email.com"
//获取指定人的email
var liEmail=emails.filter(email=>/^li/.test(email))
console.log(liEmail.join('')) //li@email.com
获取用户列表里的所有用户的email,map帮我们做到了,map方法通过传一个形参,这个形参就代表users里的每一项,map内部通过遍历所有的用户项,获取到每个用户项的email,再push到一个数组,再作为值给我们返回。第二步,我们需要获取指定人的email,filter方法登场了,通过过滤筛选email是数组,给我们返回结果,筛选方法得我们定,这里筛选方法是以正则匹配到li开头的那一个email,然后返回。
find方法:
[1, 4, -5, 10].find((n) => n < 0) // -5
find方法比较好理解,这里的参数n代表数组里的每一项,然后find方法内部通过遍历数组里的每一项,找到<0的这一项( - 5 )。
findIndex方法:find方法的回调函数可以接受三个参数,依次为当前的值、当前的位置和原数组。看一个例子:
[1, 4, -5, 10].findIndex((value,index,arr) => value < 0) // 2
在这个例子当中,value代表这个数组的每一项,1,4,-5,10。index代表每一项的索引值,arr代表这个数组[1, 4, -5, 10],然后我们需要返回的是<0的这一项的索引值,即是2了。
这4个方法内部机制都有一个遍历过程,比起forEach确实简洁多了。
接着补充ES6-some( ) 和 every( )方法的讲解:
//every()
let numbers = [2, 4, 10, 4, 8];
let a = numbers.every((item,index)=>{
if(item%2===0){
return true;
}else{
return false;
}
});
console.log(a) //some()
let b=numbers.some((item,index)=>{
if(item%3===0){
return true;
}else{
return false;
}
})
console.log(b)
some 英语翻译为一些,every翻译为所有,每个,所以some方法 只要其中一个为true 就会返回true的,相反,every()方法必须所有都返回true才会返回true,哪怕有一个false,就会返回false;every()和 some()目的:确定数组的所有成员是否满足指定的测试。具体请参考MDNhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some
总结一下:
后续补充:最近看很多小伙伴都在学习ES6,比如ES6中的map,在ES5中是怎么实现的呢?
/*
* MAP对象,实现MAP功能
*
* 接口:
* size() 获取MAP元素个数
* isEmpty() 判断MAP是否为空
* clear() 删除MAP所有元素
* put(key, value) 向MAP中增加元素(key, value)
* remove(key) 删除指定KEY的元素,成功返回True,失败返回False
* get(key) 获取指定KEY的元素值VALUE,失败返回NULL
* element(index) 获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL
* containsKey(key) 判断MAP中是否含有指定KEY的元素
* containsValue(value) 判断MAP中是否含有指定VALUE的元素
* values() 获取MAP中所有VALUE的数组(ARRAY)
* keys() 获取MAP中所有KEY的数组(ARRAY)
*
* 例子:
* var map = new Map();
*
* map.put("key", "value");
* var val = map.get("key")
* ……
*
*/
function Map() {
this.elements = new Array(); //获取MAP元素个数
this.size = function() {
return this.elements.length;
}; //判断MAP是否为空
this.isEmpty = function() {
return (this.elements.length < 1);
}; //删除MAP所有元素
this.clear = function() {
this.elements = new Array();
}; //向MAP中增加元素(key, value)
this.put = function(_key, _value) {
this.elements.push( {
key : _key,
value : _value
});
}; //删除指定KEY的元素,成功返回True,失败返回False
this.removeByKey = function(_key) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
this.elements.splice(i, 1);
return true;
}
}
} catch (e) {
bln = false;
}
return bln;
};
//删除指定KEY的所有元素
this.removeAllByKey=function(_key){
for (var i = this.elements.length - 1; i >= 0; i--) {
if (this.elements[i].key == _key) {
this.elements.splice(i, 1);
}
}
} //删除指定VALUE的元素,成功返回True,失败返回False
this.removeByValue = function(_value) {//removeByValueAndKey
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].value == _value) {
this.elements.splice(i, 1);
return true;
}
}
} catch (e) {
bln = false;
}
return bln;
}; //删除指定VALUE的元素,成功返回True,失败返回False
this.removeByValueAndKey = function(_key,_value) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].value == _value && this.elements[i].key == _key) {
this.elements.splice(i, 1);
return true;
}
}
} catch (e) {
bln = false;
}
return bln;
}; //获取指定KEY的所有元素值VALUE,以数组形式返回,失败返回false
this.get = function(_key) {
var arr=[];
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
arr.push(this.elements[i].value)
}
}
return arr;
} catch (e) {
return false;
}
return false;
}; //获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL
this.element = function(_index) {
if (_index < 0 || _index >= this.elements.length) {
return null;
}
return this.elements[_index];
}; //判断MAP中是否含有指定KEY的元素
this.containsKey = function(_key) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
bln = true;
}
}
} catch (e) {
bln = false;
}
return bln;
}; //判断MAP中是否含有指定VALUE的元素
this.containsValue = function(_value) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].value == _value) {
bln = true;
}
}
} catch (e) {
bln = false;
}
return bln;
}; //判断MAP中是否含有指定key,VALUE的元素
this.containsObj = function(_key,_value) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].value == _value && this.elements[i].key == _key) {
bln = true;
}
}
} catch (e) {
bln = false;
}
return bln;
}; //获取MAP中所有VALUE的数组(ARRAY)
this.values = function() {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
arr.push(this.elements[i].value);
}
return arr;
};
//获取MAP中所有指定VALUE的元素数组(ARRAY)
this.getAllByValue=function(_value){
var arr=[];
for (var i = this.elements.length - 1; i >= 0; i--) {
if (this.elements[i].value == _value) {
arr.push(this.elements[i]);
}
}
return arr;
} //获取MAP中指定key的所有VALUE的数组(ARRAY)
this.valuesByKey = function(_key) {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
arr.push(this.elements[i].value);
}
}
return arr;
}; //获取MAP中所有KEY的数组(ARRAY)
this.keys = function() {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
arr.push(this.elements[i].key);
}
return arr;
}; //获取key通过value
this.keysByValue = function(_value) {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
if(_value == this.elements[i].value){
arr.push(this.elements[i].key);
}
}
return arr;
}; //获取MAP中所有KEY的数组(ARRAY)key有相同的 取出的key为去重后的 数组里去重后的key的数组
this.keysRemoveDuplicate = function() {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
var flag = true;
for(var j=0;j<arr.length;j++){
if(arr[j] == this.elements[i].key){
flag = false;
break;
}
}
if(flag){
arr.push(this.elements[i].key);
}
}
return arr;
};
}
如果你需要兼容IE,用这个ES5写的map应该没有问题,明白了ES5怎么实现ES6中的map,自然也就懂了,后续货继续更新ES6其他知识点,虽然我也很菜,如发现有BUG的小伙伴,一定记得给我留言,万分感激。
后续补充:
传统写法和ES6写法对比:
var users = [
{name: "张含韵", "email": "zhang@email.com"},
{name: "江一燕", "email": "jiang@email.com"},
{name: "李小璐", "email": "li@email.com"}
]; function valuesByKey(_key) {
//定义个空数组
var arr = [];
//循环遍历users数组
for (i = 0; i < users.length; i++) {
//只要是key值等于_key的,对应的值都push进arr
arr.push(users[i][_key]);
}
//返回arr
return arr;
} var arr=users.map((user)=>user.name);
console.log(arr)//["张含韵", "江一燕", "李小璐"]
console.log(valuesByKey('name')) //["张含韵", "江一燕", "李小璐"]
js数组方法可以看我博客整理的数组相关:http://moxiaofei.com/2018/07/02/js-array/
ES6-map、filter、find、findIndex讲解的更多相关文章
- ES6 map与filter
ES6 map与filter 1.map let arr1 = [1,2,3]; let arr2 = arr1.map((value,key,arr) => { console.log(val ...
- es6 map()和filter()详解【转】
原文地址:http://www.zhangxinxu.com/wordpress/2013/04/es5%e6%96%b0%e5%a2%9e%e6%95%b0%e7%bb%84%e6%96%b9%e6 ...
- JS中的 map, filter, some, every, forEach, for in, for of 用法总结和区别
JS中的 map, filter, some, every, forEach, for in, for of 用法总结和区别 :https://blog.csdn.net/hyupeng1006/a ...
- python 内置函数 map filter reduce lambda
map(函数名,可遍历迭代的对象) # 列组元素全加 10 # map(需要做什么的函数,遍历迭代对象)函数 map()遍历序列得到一个列表,列表的序号和个数和原来一样 l = [2,3,4,5,6, ...
- 如何在python3.3用 map filter reduce
在3.3里,如果直接使用map(), filter(), reduce(), 会出现 >>> def f(x): return x % 2 != 0 and x % 3 != 0 ...
- 【原】javascript笔记之Array方法forEach&map&filter&some&every&reduce&reduceRight
做前端有多年了,看过不少技术文章,学了新的技术,但更新迭代快的大前端,庞大的知识库,很多学过就忘记了,特别在项目紧急的条件下,哪怕心中隐隐约约有学过一个方法,但会下意识的使用旧的方法去解决,多年前ES ...
- ES6 & Map & hashMap
ES6 & Map & hashMap 01 two-sum https://leetcode.com/submissions/detail/141732589/ hashMap ht ...
- Swift map filter reduce 使用指南
转载:https://useyourloaf.com/blog/swift-guide-to-map-filter-reduce/ Using map, filter or reduce to ope ...
- 使用jquery的 $.grep实现es6的filter效果
现在es6是趋势,习惯了es6会方便的多,但是有时候由于项目的限制,会限制es6的使用,在处理数组的时候,往往会想将一个数组进行过滤产生另一个新数组,如es6的filter 如下,我又一个数组,[1, ...
- map filter 的func 放在前面
map filter 的func 放在前面 sorted 在后 ( iter.. , key=function')
随机推荐
- OO第三次博客总结
一. 规格发展历史 从20世纪60年代开始,就存在着许多不同的形式规格说明语言和软件开发方法.在形式规格说明领域一些最主要的发展过程列举如下: 1969-1972 C.A.R Hoare撰写了&quo ...
- easyui获取正在编辑行的代码
easyui获取正在编辑行的代码……没这个真不知道怎么搞0.0可能这问题还要弄半天……卧槽 ...等于是笔记下来 : var ed = $("dg").datagrid('get ...
- jmeter 上传附件脚本报Non HTTP response code: java.io.FileNotFoundException
如果上传附件报如下错误,就需要把附件放到和脚本同一路径下就解决了
- md5Util
package com.rscode.credits.util; /** * MD5加密类 * @author 12 */ import java.security.MessageDigest; pu ...
- ccf-集合竞价-201412-3
这道题数据量很小,所以用前缀和直接暴力解决了 首先将浮点数转换为整数; int_p=(int)(dou_p*100+0.5); 必须加一个eps,否则浮点数运算会有误差 然后从高到低枚举 #inclu ...
- 简易实践的vue自定义tab入门
本文基于vue官方文档,分别为:动态组件 & 异步组件.插槽.进入/离开 & 列表过渡 章节链接描述 要想实现tab动画,首先要了解vue中哪些元素/那些组件适合在那些条件下实现动画效 ...
- 学习笔记CB001:NLTK库、语料库、词概率、双连词、词典
聊天机器人知识主要是自然语言处理.包括语言分析和理解.语言生成.机器学习.人机对话.信息检索.信息传输与信息存储.文本分类.自动文摘.数学方法.语言资源.系统评测. NLTK库安装,pip insta ...
- mybatis一级缓存
在select 处添加useCache=false flushCache=true, mybatis默认开启一级缓存
- JavaScript第一阶段学习心得
开始接触JavaScript是从慕课网开始的,基础篇学完.懵了一逼,可能是自己太蠢.感觉跟没学差不多,属性,方法,对象,什么都不懂.有的方法知道起的是什么效果,但是原理什么的都不知道. 还好,基础篇学 ...
- Panel 中加载窗体
pnlMain.Controls.Clear(); ControlAnalyzer1 CA1 = new ControlAnalyzer1(); CA1.TopLevel = false; CA1.S ...