zoukankan      html  css  js  c++  java
  • 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>
     
  • 相关阅读:
    Java(二)
    JS === 关于getElementsByClassName()
    JS === 简易放大镜
    JS === 拖拽盒子
    JS === 实现多个光标跟随事件
    JS === 实现回到顶部
    JS === 实现通过点击td 跳转相应的图片
    final、static关键字
    java面向对象——构造方法
    java面向对象——多态
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/12693656.html
Copyright © 2011-2022 走看看