es6新增处理数组的方法,map、forEach、filter、some、every、reduce等
map对数组遍历并返回新数组
使用方法
const arr = [1,2,3];let resArrFor = arr.forEach(item=>{console.log(item*2)return item*2})console.log(resArrFor); // undefined
forEach对数组遍历,不返回值
使用方法
let resArr = arr.map(item=>{console.log(item*2)return item*2})console.log(resArr); //[2,4,6]
注意事项:
forEach只会将异步代码执行,不会等待回调函数的结果,所以在内部使用await或promise无效。不会等待内部异步执行完成后才执行后续同步代码,要解决此问题,只能使用for替代。
const list = [1,2,3,4,5]let run = (num)=>{return new Promise((resolve, reject)=>{setTimeout(()=>{resolve(num)},1000)})}let testForEach = ()=>{list.forEach(async l=>{const r = await run(l)console.log('forEach执行结果: ',r);})console.log('forEach外部log');}console.log('------------------------');let testFor = async()=>{for(let i=0;i<list.length;i++){const r = await run(list[i])console.log('for执行结果: '+r);}console.log('for外部log');}testForEach()testFor()
以上代码执行结果
forEach外部log
forEach执行结果:  1
forEach执行结果:  2
forEach执行结果:  3
forEach执行结果:  4
forEach执行结果:  5
————————————
for执行结果: 1
for执行结果: 2
for执行结果: 3
for执行结果: 4
for执行结果: 5
for外部log
forEach会先打印后边的log,然后同时打印出来1-5的执行结果。forEach在执行异步的时候类似并发执行。使用for执行会等待异步的结果。
filter的用法
使用filter对数组去重
const array = [5,4,7,8,9,2,7,5];// 主要是,如果值存在,则索引值只会使用第一个的,后边的值会被过滤掉array.filter((item,idx,arr) => arr.indexOf(item) === idx);
reduce的使用
reduce可以处理数组的去重、扁平化、求和等,reduce(function(prev, now, index, arr){  }, value?)
参数(prev, now, index, arr),value为迭代开始的值
- prev: 表示函数执行时的上一个元素,如果value不存在,第一次表示数组的第一个值,否则就是value的值
 - now:表示函数执行时的当前元素,如果value 不存在,第一次表示数组第二个值,否则是数组第一个值
 - index: 从0开始,索引值
 - arr:表示数组
使用reduce求和
let arr1 = [1,2,3,4,5,6,7,8,9]console.log("数组求和",arr1.reduce((prev, now)=>{return prev + now;}))
使用reduce将数组扁平化
let arr2 = [1,2,[3,"k",[8,"o"],["p"]],"p",[9,0]]let flatArray = (arr)=>{return arr.reduce((prev, now)=>{return prev.concat(Array.isArray(now) ? flatArray(now) : now)},[])}console.log("数组扁平化", flatArray(arr2))
使用reduce求数组元素的个数
let fruit = ["苹果","香蕉", "橘子", "香蕉", "西瓜", "樱桃", "苹果"]let fruitNum = fruit.reduce((prev, now)=>{if(now in prev){prev[now]++;}else{prev[now] =1;}return prev;},{})console.log("水果的个数", fruitNum)
使用reduce将数组去重
let arr3 = [1,2,3,1,2,3,2,4,5,6,6,1,2,7,8,9]console.log("去重后的数组",arr3.reduce((prev, now)=>{if(prev.includes(now)){return prev}else{return prev.concat(now)}},[]))
 
