失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > ES6数组新增方法forEach map filter find every some reduce的用法

ES6数组新增方法forEach map filter find every some reduce的用法

时间:2021-01-27 19:31:03

相关推荐

ES6数组新增方法forEach map filter find every some reduce的用法

*ES6语法:

Opera 11+

Firefox 3.6+

Safari 5+

Chrome 8+

Internet Explorer 9+支持。可以通过babel转意支持低版本浏览器。

forEach()

ES6新增的一种循环

案例1:打印数组中所有对象

numbers=[1,2,3,4,5]numbers.forEach(number => {console.log(number) //1 2 3 4 5});

案例2:将数组中所有数字相加(这里用了函数抽离的方式)

numbers=[1,2,3,4,5]var sum=0function add(num){sum+=num}numbers.forEach(add)console.log(sum) //15

map()

map函数可以看成是一种映射函数,而且是一一映射map适合对一个数组中的每个元素进行相同的操作

原数组被“映射”成对应新数组,返回一个新数组

案例1:将原数组的每个数字都*2

var numbers=[1,2,3,4,5]var doublnumbers=numbers.map(number=>{return number*2})console.log(doublnumbers) //[2,4,6,8,10]

案例2:将A对象数组中某个属性存到B数组中

var building=[{name:'the Great Wall',location:'BeiJing'},{name:'Eiffel Tower',location:'Paris '}]var citys=building.map(item=>{return item.location})console.log(citys) //["BeiJing", "Paris "]

filter()

filter函数可以看成是一个过滤函数,返回符合条件的元素的数组filter和map的区别:filter需要在循环的时候判断一下是true还是false,是true才会返回这个元素;map没有这个过程。filter函数适合筛选一个数组中满足条件的元素,注意:filter函数只是筛选功能,不能改变元素、操作元素

filter为“过滤”。数组filter后,返回过滤后的新数组

案例1:假定有一个对象数组A,获取数组中指定类型的对象放到B数组中

var products = [{name:"cucumber",type:"vegetable"},{name:"banana",type:"fruit"},{name:"celery",type:"vegetable"},{name:"orange",type:"fruit"}]; var filtered = products.filter((product)=>{return product.type === "vegetable";})console.log(filtered) //[{name:"cucumber",type:"vegetable"},{name:"celery",type:"vegetable"}]

案例2:假定有两个数组(A,B),根据A中id值,过滤掉B数组不等于A中id的数据

var post = {id:4,title:"Javascript"};var comments = [{postId:4,content:"Angular4"},{postId:2,content:"Vue.js"},{postId:3,content:"Node.js"},{postId:4,content:"React.js"} ];function commentsForPost(post,comments){return comments.filter(function(comment){return comment.postId === post.id;})}console.log(commentsForPost(post,comments)); //[ {postId:4,content:"Angular4"},{postId:4,content:"React.js"}]

find()

查找到第一个符合条件的元素,则立刻返回

在数组中找到符合要求的对象 和filter的区别就是找到符合要求的对象就停止寻找了,返回的是一个对象,而filter返回的是所有符合要求的对象组成的新数组

案例1:假定有一个对象数组(A),找到符合条件的对象

var users = [{name:"Jill",id:1},{name:"Alex",id:2},{name:"Bill",id:3},{name:"Alex",id:4}];user = users.find(function(user){return user.name === "Alex";})console.log(user); //{name: "Alex", id: 2}

案例2:假定有两个数组(A,B),根据A中id值,找到B数组等于A中id的数据

var post = {id:4,title:"Javascript"};var comments = [{postId:4,content:"Angular4"},{postId:2,content:"Vue.js"},{postId:3,content:"Node.js"},{postId:4,content:"React.js"} ];function commentsForPost(post,comments){return comments.find(function(comment){return comment.postId === post.id;})}console.log(commentsForPost(post,comments)); // {postId:4,content:"Angular4"}

every() some()

every 若目标数组中每一个对象都符合条件则返回true,否则返回false

some 若目标数组中有一个或一个以上的对象符合条件的返回true,否则返回false

案例

var users = [{name:"Jill",age:10},{name:"Alex",age:18},{name:"Bill",age:20},{name:"Tony",age:24}];var isAdult_every=users.every(user=>{return user.age>18;})var isAdult_some=users.some(user=>{return user.age>18;})console.log(isAdult_every) //falseconsole.log(isAdult_some) //true

reduce()

array.reduce((previous, current, index, array) =>{

函数体

}, [initialValue])

reduce函数有四个参数:之前值,当前值,索引值,数组本身。previous值取决于[initialValue]如果指定[initialValue]指定是,则作为previous的初始值,也可作为空数组[],如果缺省的话,则将数组的第一个元素作为previous的初始值,下次循环时,之前值就是上一次的当前值,而当前值会变成下一个索引对应的元素,依次类推。

常用于叠加,可以代替forEach等

案例计算数组中所有值的总和

var numbers = [1,2,3,4,5];var sumValue = numbers.reduce(function(sum,number2){//第一个参数为叠加总值,需要初始化,第二个参数是当前项return sum + number2;},0); //sum的初始化console.log(sumValue); //15

1、reduce的简单用法

当然最简单的就是我们常用的数组求和,求乘积了。

var arr = [1, 2, 3, 4];var sum = arr.reduce((x,y)=>x+y)var mul = arr.reduce((x,y)=>x*y)console.log( sum ); //求和,10console.log( mul ); //求乘积,24

2、reduce的高级用法

(1)计算数组中每个元素出现的次数

let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];let nameNum = names.reduce((pre,cur)=>{if(cur in pre){pre[cur]++}else{pre[cur] = 1 }return pre},{})console.log(nameNum); //{Alice: 2, Bob: 1, Tiff: 1, Bruce: 1}

(2)数组去重

let arr = [1,2,3,4,4,1]let newArr = arr.reduce((pre,cur)=>{if(!pre.includes(cur)){return pre.concat(cur)}else{return pre}},[])console.log(newArr);// [1, 2, 3, 4]

(3)将二维数组转化为一维

let arr = [[0, 1], [2, 3], [4, 5]]let newArr = arr.reduce((pre,cur)=>{return pre.concat(cur)},[])console.log(newArr); // [0, 1, 2, 3, 4, 5]

(4)将多维数组转化为一维

let arr = [[0, 1], [2, 3], [4,[5,6,7]]]const newArr = function(arr){return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[])}console.log(newArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7]

(5)对象里的属性求和

var result = [{subject: 'math',score: 10},{subject: 'chinese',score: 20},{subject: 'english',score: 30}];var sum = result.reduce(function(prev, cur) {return cur.score + prev;}, 0);console.log(sum) //60

如果觉得《ES6数组新增方法forEach map filter find every some reduce的用法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。