重写数组的扩展方法

1、forEach:遍历数组

 let data = [1,2,3,4,5,6,7]
//用法
    data.forEach(function(res,index,arr){
        // forEach 的 this 指向forEach 的第二个参数  {name: "aaaaaa"},没有第二个参数的话,this指向window
        console.log(this)
        // console.log(res,index,arr)
    },{name: "aaaaaa"})

//重写
    Array.prototype.myForEach = function(fn) {
        //数组调用,this指向数组本身,通过this获取数组
        let arr = this 
        let len = arr.length
        //forEach方法有两个参数,第一个参数是函数,第二个参数是myForEach方法的this指向,没有第二个参数的话,this指向window
        //例如:myForEach 的 this 指向  {name: "aaaaaa"}
        let arg1 = arguments[1] || window  

        for(let i = 0;i

2、filter:过滤 用来筛选符合条件的元素。

    let data = [1,2,3,4,5,3,4,3]
    //  用法
   let newArr = data.filter(function(elem,index,arr) {
        console.log(this)
        return elem == 4
    },{name: "aaaaaa"})
    console.log(newArr)
    //重写
    Array.prototype.myFilter = function(fn){
        let arr = this;
        let len = arr.length;
        let arg1 = arguments[1] || window
        let newArr = [] //注意这里push进来的是应用类型的下标

        for(let i = 0;i

3、map 映射

            { name: "aaaaaa", price: 23 },
            { name: "aaaaaa", price: 23 },
            { name: "aaaaaa", price: 23 },
        ]
        var tempBook = book.map(function(elem,index,arr){
            elem.name = "123"+elem.name //map里面修改了数组里面的数据,原数组也会产生影响
            return elem
        })

        Array.prototype.myMap = function(fn){
            let arr = this;
            let len = arr.length;
            let arg1 = arguments[1] || window
            let newArr = []
            let temp;

            for(let i = 0;i

4、every : 有一个条件(不满足)就停止遍历 some : 有一个条件(满足)就停止遍历

   // every() some()
        var people = [
            { name: 'aaa', age: 11 },
            { name: 'aaa', age: 12 },
            { name: 'aaa', age: 13 },
        ]
//用法
        //如果有一个条件(不满足)就停止遍历,return后面的表达式就是条件
        var res = people.every(function(elem,index,arr){
            console.log(elem.age)
            return elem.age == 13
        })

//重写
        //如果有一个条件(满足)就停止遍历,return后面的表达式就是条件
        var res = people.some(function(elem,index,arr){
            console.log(elem.age)
            return elem.age == 12
        })
        Array.prototype.myEvery = function(fn){
            let arr = this;
            let len = arr.length;
            let arg1 = arguments[1]
            let res = true

            for(let i = 0 ; i < len ; i++){
                res = fn.apply(arg1,[arr[i],i,arr])
                if(!res){
                    break
                }
            }
            return res
        }
        function fn(elem,index,arr){
            return elem.age == 13
        }
        console.log(people.myEvery(fn))

5、reduce() 归纳函数

        let sum = [1,2,3,4,5,6,7,8,9]
//用法
        let total = sum.reduce((total,item) => {
            return total+item
        })
            console.log(total); // 45
//重写
        Array.prototype.myReduce = function(fn,initalValue){
            var arr = this;
            var len = arr.length;
            var arg2 = arguments[2] || window
            for(let i = 0; i < len; i++){
                initalValue = fn.apply(arg2,[initalValue,arr[i],arr])
            }
            return initalValue
        }
        function fn(init,elm,index,arr){
            return init + elm
        }
        console.log(sum.myReduce(fn,0))

你可能感兴趣的:(重写数组的扩展方法)