JS数组常用方法---14、2个归并方法
JS数组常用方法---14、2个归并方法
一、总结
一句话总结:
ES5中的归并方法有reduce()和reduceRight(),reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。reduce方法可做的事情特别多,就是循环遍历能做的,reduce都可以做,比如数组求和、数组求积、数组中元素出现的次数、数组去重等等。reduceRight()方法基本和reduce()一样,只不过是从右向左执行。
1、reduce方法 常用参数?
reduce方法虽然参数比较多,有回调函数中的prev,cur,index,arr,还有reduce的第二个参数init,但是常用的也就prev和cur
arr.reduce(function(prev,cur,index,arr){ ... }, init); 其中, arr 表示原数组; prev 表示上一次调用回调时的返回值,或者初始值 init; cur 表示当前正在处理的数组元素; index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1; init 表示初始值。 看上去是不是感觉很复杂?没关系,只是看起来而已,其实常用的参数只有两个:prev 和 cur。接下来我们跟着实例来看看具体用法吧~
2、reduce() 方法和forEach()、map()、filter()等迭代方法 的区别?
虽然都有遍历,但是reduce()方法可以将前面数组项遍历产生的结果与当前遍历项进行运算
reduce() 是数组的归并方法,与forEach()、map()、filter()等迭代方法一样都会对数组每一项进行遍历,但是reduce() 可同时将前面数组项遍历产生的结果与当前遍历项进行运算,这一点是其他迭代方法无法企及的
3、reduce() 方法 回调函数中各个参数的意思?
a、prev 表示上一次调用回调时的返回值,或者初始值 init;
b、cur 表示当前正在处理的数组元素;
c、index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;
d、arr 表示原数组;
arr.reduce(function(prev,cur,index,arr){ ... }, init); 其中, arr 表示原数组; prev 表示上一次调用回调时的返回值,或者初始值 init; cur 表示当前正在处理的数组元素; index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1; init 表示初始值。
4、reduce() 方法 第二个参数init的意思?
传递给reduce方法的初始值
5、reduce() 方法 的语法?
arr.reduce(function(prev,cur,index,arr){ }, init);
arr.reduce(function(prev,cur,index,arr){ ... }, init); 其中, arr 表示原数组; prev 表示上一次调用回调时的返回值,或者初始值 init; cur 表示当前正在处理的数组元素; index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1; init 表示初始值。
6、reduce() 方法 和 reduceRight()方法的区别?
reduce() 方法遍历的时候是从左向右,reduceRight()方法遍历的时候从右像左
二、2个归并方法
博客对应课程的视频位置:
1、arr.reduce(function(prev,cur,index,arr){ }, init)
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>2个归并方法</title> 6 </head> 7 <body> 8 <!-- 9 callback (执行数组中每个值的函数,包含四个参数) 10 11 1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue)) 12 2、currentValue (数组中当前被处理的元素) 13 3、index (当前元素在数组中的索引) 14 4、array (调用 reduce 的数组) 15 16 initialValue (作为第一次调用 callback 的第一个参数。) 17 18 19 --> 20 <script> 21 //1、回调函数的参数 22 // var arr = [1, 2, 3, 4]; 23 // var sum = arr.reduce(function(prev, cur, index, arr) { 24 // console.log(prev, cur, index); 25 // return prev + cur; 26 // }); 27 // console.log(arr, sum); 28 29 //2、设置初始值 30 // var arr = [1, 2, 3, 4]; 31 // var sum = arr.reduce(function(prev, cur, index, arr) { 32 // console.log(prev, cur, index); 33 // return prev + cur; 34 // },0); //注意这里设置了初始值 35 // console.log(arr, sum); 36 37 //如果没有提供initialValue,reduce 会从索引1的地方开始执行 callback 方法, 38 // 跳过第一个索引。如果提供initialValue,从索引0开始。 39 40 //3、如果这个数组为空,运用reduce是什么情况 41 // var arr = []; 42 // var sum = arr.reduce(function(prev, cur, index, arr) { 43 // console.log(prev, cur, index); 44 // return prev + cur; 45 // }); 46 //报错,"TypeError: Reduce of empty array with no initial value" 47 48 //但是要是我们设置了初始值就不会报错 49 // var arr = []; 50 // var sum = arr.reduce(function(prev, cur, index, arr) { 51 // console.log(prev, cur, index); 52 // return prev + cur; 53 // },0); 54 // console.log(arr, sum); // [] 0 55 56 //4、reduce的简单用法:数组求和,求乘积 57 // var arr = [1, 2, 3, 4]; 58 // var sum = arr.reduce((x,y)=>x+y); 59 // var mul = arr.reduce((x,y)=>x*y); 60 // console.log( sum ); //求和,10 61 // console.log( mul ); //求乘积,24 62 63 //5、计算数组中每个元素出现的次数 64 // let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']; 65 // let nameNum = names.reduce((pre,cur)=>{ 66 // if(cur in pre){ 67 // pre[cur]++; 68 // }else{ 69 // pre[cur] = 1; 70 // } 71 // return pre; 72 // },{}); 73 // console.log(nameNum); //{Alice: 2, Bob: 1, Tiff: 1, Bruce: 1} 74 75 //6、数组去重 76 // let arr = [1,2,3,4,4,1]; 77 // let newArr = arr.reduce((pre,cur)=>{ 78 // if(!pre.includes(cur)){ 79 // return pre.concat(cur); 80 // }else{ 81 // return pre; 82 // } 83 // },[]); 84 // console.log(newArr);// [1, 2, 3, 4] 85 86 //7、将二维数组转化为一维 87 // let arr = [[0, 1], [2, 3], [4, 5]]; 88 // let newArr = arr.reduce((pre,cur)=>{ 89 // return pre.concat(cur) 90 // },[]); 91 // console.log(newArr); // [0, 1, 2, 3, 4, 5] 92 93 //8、将多维数组转化为一维 94 // let arr = [[0, 1], [2, 3], [4,[5,6,7]]]; 95 // const newArr = function(arr){ 96 // return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[]) 97 // }; 98 // console.log(newArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7] 99 100 //9、对象里的属性求和 101 // var result = [ 102 // { 103 // subject: 'math', 104 // score: 10 105 // }, 106 // { 107 // subject: 'chinese', 108 // score: 20 109 // }, 110 // { 111 // subject: 'english', 112 // score: 30 113 // } 114 // ]; 115 // 116 // var sum = result.reduce(function(prev, cur) { 117 // return cur.score + prev; 118 // }, 0); 119 // console.log(sum) //60 120 121 122 </script> 123 </body> 124 </html>
2、arr.reduceRight(function(prev,cur,index,arr){ }, init)
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>reduceRight()</title> 6 </head> 7 <body> 8 <!-- 9 10 11 reduce() 方法 和 reduceRight()方法的区别 12 reduce() 方法遍历的时候是从左向右,reduceRight()方法遍历的时候从右像左 13 14 --> 15 <script> 16 var a = ['1', '2', '3', '4', '5']; 17 var left = a.reduce(function(prev, cur) { return prev + cur; }); 18 var right = a.reduceRight(function(prev, cur) { return prev + cur; }); 19 20 console.log(left); // "12345" 21 console.log(right); // "54321" 22 </script> 23 </body> 24 </html>
版权申明:欢迎转载,但请注明出处
一些博文中有一些参考内容因时间久远找不到来源了没有注明,如果侵权请联系我删除。
在校每年国奖、每年专业第一,加拿大留学,先后工作于华东师范大学和香港教育大学。
2024-10-30:27岁,宅加太忙,特此在网上找女朋友,坐标上海,非诚勿扰,vx:fan404006308
AI交流资料群:753014672