reduce优秀

高举reduce大旗,优秀

1、语法
arr.reduce(callback,[initialValue])
reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。

callback (执行数组中每个值的函数,包含四个参数)

    1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
    2、currentValue (数组中当前被处理的元素)
    3、index (当前元素在数组中的索引)
    4、array (调用 reduce 的数组)

initialValue (作为第一次调用 callback 的第一个参数。)
<script>
    // var arr = [1,2,3,4];
    var arr = [];
    var sum = arr.reduce(function(prev,cur,index,arr){
        console.log(prev,cur,index);
        return prev+cur;
    },0)//initialValue初始值,如果数组为空的话,在没有初始值的情况下,会报错。提供初始值会更安全。
    console.log(arr,sum);

    //求和,求积
    var arr1 = [1,2,4,4,5];
    var sum1= arr1.reduce((x,y)=>x+y);
    var mul = arr1.reduce((x,y)=>x*y);
    console.log(sum1);
    console.log(mul);

    //计算数组中每个元素出现的次数
    var arr2 = ["a","b","c","b","a","a"];
    let ascnum = arr2.reduce((pre,cur)=>{
        if(cur in pre){
            pre[cur]++;
        }else{
            pre[cur] = 1;
        }
        return pre;
    },{})
    console.log(ascnum);

    //数组去重
    let arr3 = [3,5,5,3,2,2,3,5,2];
    let newarr = arr3.reduce((pre,cur)=>{
        if(!pre.includes(cur)){//includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
            return pre.concat(cur);//concat() 方法用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
        }else{
            return pre;
        }
    },[])
    console.log(newarr);

    //二维数组转化为一维
    let arr4 = [[1,3],[3,5],[3,6]];
    const newarr1 = arr4.reduce((pre,cur)=>{
        return pre.concat(cur);
    },[])
    console.log(newarr1);

    //将多维数组转化为一维
    let arr5 = [[1,3,4],[3,4,[5,6,7]]];
    const newarr2 = function(arr5){
        return arr5.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newarr2(cur):cur),[]);
    }
    console.log(newarr2(arr5));

    //对象里的属性求和
    var result = [
        {
            name:"zhangsan",
            age:7
        },
        {
            name:"lisi",
            age:9
        },
        {
            name:"wangwu",
            age:20
        }
    ];
    var sum = result.reduce((prev,cur)=>{
        return cur.age + prev;
    },0);
    console.log(sum)
</script>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章