js常用数组方法==简单模拟实现

本文总结了JavaScript中几个常用的数组方法,包括forEach用于遍历并处理数组元素,map用于映射创建新数组,filter用于筛选元素生成新数组,findIndex用于查找元素索引,reduce用于累加求和,以及some和every分别用于判断数组中是否存在符合条件的元素。

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

总结:

 1.forEach循环==专门遍历数组;不需要return,在内部对数组的元素直接进行处理即可

 2.map==数组映射,返回一个新数组;

  内部创建全新数组,收集每次return的值,遍历结束,返回这个全新的数组;不同于原来的数组!

3.filter == 数组筛选,返回一个新数组

注意点:filter方法会遍历整个数组,只有某个元素符合筛选条件,返回值为true的时候,该元素才会被添加进返回的新数组中;

4.findIndex===查找索引,找不到返回-1

5.reduce 方法==累加求和

注意:一定要有return,下次函数体执行,sum初始值是上一次return的结果!

6.some方法===查找是否有'符合'条件的元素,有返回true,停止循环

7.every方法===查找是否有‘不符合条件的元素’,有就返回false,停止循环

  <script>

        // 1.forEach循环==专门遍历数组
        Array.prototype.forEach = function (fn) {
            // this指的是函数的调用者,arr
            for (let i = 0; i < this.length; i++) {
                fn(this[i], i, this)
            }
        }

        const arr = [1, 3, 4, 5]
        arr.forEach((value, index, arr) => {
            console.log(value, index);
        })


        // 2.map==数组映射,返回一个新数组
        Array.prototype.map = function (fn) {
            const newArr = []
            for (let i = 0; i < this.length; i++) {
                const res = fn(this[i], i, this)
                //原理:把每次遍历return的结果添加到一个新数组,然后返回这个新数组
                newArr.push(res)
            }
            return newArr
        }

        const arr1 = [1, 3, 4, 5]
        const res = arr1.map((value, index, arr) => {
            return value * 2
        })
        console.log(res);


        // 3.filter == 数组筛选,返回一个新数组
        Array.prototype.filter = function (fn) {
            const newArr = []
            // this指的是函数的调用者,arr2
            for (let i = 0; i < this.length; i++) {
           // 每遍历一个元素,返回一个Boolean值,表示是否符合条件
                const res = fn(this[i], i, this)  
            //原理:如果遍历的元素为true,添加到新数组,返回新数组
                if (res) {
                    newArr.push(this[i])
                }
            }
            return newArr
        }


        const arr2 = [1, 3, 4, 5]
        const res2 = arr2.filter((value, index, arr) => {
            return value > 2
        })
        console.log(res2);


        // 4.findIndex===查找索引,找不到返回-1
        Array.prototype.findIndex = function (fn) {
            let ind = -1
            // this指的是函数的调用者,arr3
            for (let i = 0; i < this.length; i++) {
                const res = fn(this[i], i, this)  // 返回Boolean,true表示符合条件
                // 原理:只有为true时,进入循环,返回索引;否则返回-1
                if (res) {
                    ind = i
                }
            }
            return ind
        }

        const arr3 = [1, 3, 4, 5]
        const res3 = arr.findIndex((value, index, arr) => {
            return value === 0
        })
        console.log(res3);


        // 5.reduce 方法====累计求和
        Array.prototype.reduce = function (fn, num) {
            let newsum = num  // 初始值
            // this指的是函数的调用者,arr4
            for (let i = 0; i < this.length; i++) {
                // 下一次调用时,把上一次的结果传进去,继续累加
                newsum = fn(newsum, this[i], i, this)
            }
            return newsum
        }



        const arr4 = [1, 3, 4, 5]
        const res4 = arr2.reduce((sum, value, index, arr) => {
            return sum += value
        }, 0)
        console.log(res4);


        // 6.some方法===查找是否有'符合'条件的元素,有返回true,停止循环
        Array.prototype.some = function (fn) {
            // this指的是函数的调用者,arr5
            for (let i = 0; i < this.length; i++) {
                const boolean = fn(this[i], i, this)
                //   原理:有符合条件的元素,就返回true;否则返回false
                if (boolean) {
                    return true
                }
            }
            return false
        }
        const arr5 = [1, 3, 4, 5]
        const res5 = arr5.some((value, index, arr) => {
            // 查找是否有大于2的元素
            return value > 2
        })
        console.log(res5);


        // 7.every方法===查找是否有‘不符合条件的元素’,有就返回false,停止循环
        Array.prototype.every = function (fn) {
            // this指的是函数的调用者,arr6
            for (let i = 0; i < this.length; i++) {
                const boolean = fn(this[i], i, this)
                console.log(boolean);
                //   原理:有不符合条件的元素,就返回false;
                if (!boolean) {
                    return false
                }
            }
            return true
        }
        const arr6 = [1, 3, 4, 5]
        const res6 = arr6.every((value, index, arr) => {
            //判断是否所有元素大于2
            return value > 2
        })
        console.log(res6);
    </script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值