深入数组 map forEach filter reduce 函数

本文深入探讨了JavaScript中数组的forEach、filter、map及reduce方法的手动实现过程,包括如何处理对象的深度克隆,以及reduce方法的灵活运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        var personArr = [
            { name: 'gao', src: '../images/1.jpg', sex: 'f' },
            { name: 'bang', src: '../images/2.jpg', sex: 'm' },
            { name: 'rong', src: '../images/3.jpg', sex: 'm' }
        ];
        // //1.forEach函数 没法跳出for循环 没法打断遍历
        // //break语句是写在func函数里面的
        // Array.prototype.myForEach=function(func){
        //     for(var i=0;i<this.length;i++){
        //         func(this[i],i,this);
        //     // if(elem.name=="gao"){
        //     //     break;
        //     // }
        //     }
        // }
        // personArr.myForEach(function(elem,index,arr){
        //     console.log(arr);
        //     // if(elem.name=="gao"){
        //     //     break;
        //     // }
        // })


        //filter()返回的是布尔值
        // Array.prototype.filter = function (func) {
        //     var arr = [];
        //     for (var i = 0; i < this.length; i++) {
        //         var tape = func(this[i], i);//回调函数来控制执行结果 布尔值判断是否返回true
        //         if (tape) {
        //             arr.push(this[i]);
        //         }
        //     }
        //     return arr;
        // }
        // var arr1 = personArr.filter(function (elem, index) {
        //     if (elem.sex == 'f') {
        //         return true;
        //     } else {
        //         return false;
        //     }
        // });
        // console.log(arr1);

        //map()返回的是值
        // Array.prototype.map = function (func) {
        //     var arr=[];
        //     for (var i = 0; i < this.length; i++) {
        //         if(typeof(this[i])=='object'){//如果选项是对象属性类,需要进行深度拷贝再放到数组中
        //             var newObj={};
        //             deepClone(newObj,this[i]);//对对象进行深度拷贝
        //             arr.push(func(newObj,i));//将克隆好的对象进行func()筛选操作 然后放到数组中
        //         }else{//如果对象是原始数值 就直接放到数组中
        //             arr.push(func(this[i],i));
        //         }
        //     }
        //     return arr;
        // }
        // var arr1 = personArr.map(function (elem, index) {
        //     if (elem.sex == 'f') {
        //         elem.boyF = true;
        //         return elem;
        //     } else {
        //         elem.gf = true;
        //         return elem;
        //     }
        // })
        // console.log(arr1);
        // function deepClone(target, origin) {
        //     var target=target||{};
        //     //容错处理以防如果外部没有传入的空对象,就自己创建一个新的空对象{},
        //     //若有的话就把旧target对象传给新创建的target
        //     var objStr = '[object Object]';
        //     var arrStr = '[object Array]';
        //     if (origin !== 'null') {
        //         for (var prop in origin) {
        //             if (origin.hasOwnProperty(prop)){
        //                 if (typeof(origin[prop]) == 'object') {
        //                     if (Array.prototype.toString.call(origin[prop]) == objStr) {
        //                         target[prop] = {};
        //                     } else {
        //                         target[prop] = [];
        //                     }
        //                     deepClone(target[prop], origin[prop]);
        //                 } else {
        //                     target[prop] = origin[prop];
        //                 }         
        //             }
        //         }
        //     }
        //      return target;//如果外部调用函数没有传target对象情况,就返回一个复制好的对象
        // }


        //reduce函数
        Array.prototype.reduce=function(func,init){
            var previous=init,k=0;
            if(init==undefined){
                previous=this[0];
                k=1;
            }
            for(k;k<this.length;i++){
                // previous=previous+this[k];
               previous=func(previous,this[k],k);
               //用previous接收,第二遍的时候再将previous传到func函数中
            }
            return previous;//最后的结果赋值到previous中
            
        }
        var arr=[1,2,3,4,5];
        var value=arr.reduce(function(preValue,ele,index){
            return preValue+ele;
        });
        console.log(value);
    

    </script>
</body>

</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值