ziwei3749 / blog

已停止更新..转移至 https://segmentfault.com/u/ziwei3749
9 stars 1 forks source link

实现JS原生数组的shift、unshift、pop、push #8

Open ziwei3749 opened 6 years ago

ziwei3749 commented 6 years ago

实现数组的shift、unshift、pop、push

unshift

实现数组原生的unshift方法 : 在数组头部,增加一些元素

        Array.prototype.unshift = function ( ...elements ) {

            for ( let i = this.length + ( elements.length - 1 ); i >= 0; i-- ) {
                this[ i ] = this[ i - ( elements.length ) ]
            }
            console.log( this )
            for ( var i = 0; i < elements.length; i++ ) {
                this[ i ] = elements[ i ]
            }
            return this.length
        }

push

思路:

  • push一个的话,就是 this[this.length] = params
  • push n 个的话,就是 this[this.length + i] = params[i]
  • 要注意this.length的长度会变化,所以最初用变量保存了一下。
        Array.prototype.push = function ( ...elements ) {

            var initLength = this.length   // 保存一下最初的长度
            for ( var i = 0; i < elements.length; i++ ) {
                this[ initArrLength + i ] = elements[ i ]   
            }

            return this.length
        }

shift

这里我arr.length--,它删除掉array里最后一个元素,说明数组符合栈的特点后进先出

Array.prototype.shift = function () {
        var fitstItem = this[ 0 ]
        for ( var i = 0; i < arr.length; i++ ) {
            arr[ i ] = arr[ i + 1 ]
        }
        arr.length--;    // 这里我通过数组长度减一,自动就减掉数组的最后一项
        return fitstItem
    }

pop

   Array.prototype.pop = function () {
            var lastItem = this[ this.length-1 ]
            arr.length--; // 这里我通过数组长度减一,自动就减掉数组的最后一项
            return lastItem
        }