ES5數組一些經常使用的方法源碼實現

            //forEach源碼實現
            Array.prototype.customeForEach = function (func, thisValue) {
                var arr = this;
                for (var i = 0; i < arr.length; i++) {
                    func.call(thisValue, arr[i], i, arr);
                }
            }
            //some源碼實現
            Array.prototype.customeSome = function (func, thisValue) {
                var arr = this;
                var state = false;
                for (var i = 0; i < arr.length; i++) {
                    var val = func.call(thisValue, arr[i], i, arr);
                    if (val) {
                        state = true;
                        break;
                    }
                }
                return state;
            }
            //reduce源碼實現
            Array.prototype.customeReduce = function (func, thisValue) {
                var arr = this;
                var total = thisValue ? thisValue : arr[0];
                for (var i = thisValue ? 0 : 1; i < arr.length; i++) {
                    total = func(total, arr[i], i);
                }
                return total;
            }
            //filter源碼實現
            Array.prototype.customeFilter = function (func, thisValue) {
                var arr = this;
                var result=[];
                for (var i = 0; i < arr.length; i++) {
                    var val = func.call(thisValue, arr[i], i, arr);
                    if(val){
                         result.push(arr[i])
                    }
                }
                return result;
            }
            //map源碼實現
            Array.prototype.customeMap=function(func, thisValue){
                var arr = this;
                var result=[];
                for (var i = 0; i < arr.length; i++) {
                    var val = func.call(thisValue, arr[i], i, arr);
                    result.push(val);
                }
                return result;
            }
            //every源碼實現
            Array.prototype.customeEvery=function(func,thisValue){
                var arr = this;
                var state = true;
                for (var i = 0; i < arr.length; i++) {
                    var val = func.call(thisValue, arr[i], i, arr);
                    if (!val) {
                        state = false;
                        break;
                    }
                }
                return state;
            }

源碼的學習對於提高js仍是很重要的,咱們不僅僅是要學會怎麼用,還要搞清楚內部是如何實現,以前我對數組的這些方法也不是很清楚,只用到了其中的一部分,如今經過總結能夠加深對他們的理解。數組

相關文章
相關標籤/搜索