數(shù)組的push、pop、shift、unshift方法

![Uploading 9247.tmp_651084.png . . .]

數(shù)組的棧

棧是一種LIFO(Last-In-First-Out,后進(jìn)先出)的數(shù)據(jù)結(jié)構(gòu),也就是最新添加的項(xiàng)最早被移除。

push方法

push從數(shù)組的后面推入數(shù)組的項(xiàng),并返回?cái)?shù)組的長(zhǎng)度。

pop方法

pop刪除數(shù)組的最后一項(xiàng),并返回改項(xiàng)的值。

        var colors=new Array;
    var count=colors.push("green","blue");
    console.log(count);//2

    var a=['a','b','c'];
    var item=a.pop();
    console.log(item);//c
數(shù)組列隊(duì)

列隊(duì)數(shù)據(jù)的訪問(wèn)規(guī)則是先進(jìn)先出,F(xiàn)IFO(first in first out)的行為。列隊(duì)在列隊(duì)的末端添加項(xiàng),在列隊(duì)的前端移除項(xiàng)。ECMAscript定義shift()方法移除前端的第一項(xiàng),并返回改項(xiàng)。

shift方法

shift方法移除數(shù)組的第一項(xiàng),并返回該項(xiàng)。

var a=['a','b','c'];
var item=a.shift();
console.log(item);//a
unshift方法

相反的,unshift方法在數(shù)組的前端添加任意項(xiàng),并返回?cái)?shù)組的長(zhǎng)度。

var a=['a','b','c'];
var item=a.unshift('1','1');
console.log(item);//5
push 和 unshift 的性能測(cè)試
        //push 和unshift的性能測(cè)試
        //=+new Date(),相當(dāng)于Date().valueOf();
    var arr=[];
    var startTime=new Date().valueOf();
    for(var i=0;i<100000;i++){
        arr.push(i);
    }
    var endTime=new Date().valueOf();
    console.log("調(diào)用push方法往數(shù)組中添加100000個(gè)元素耗時(shí)"+(endTime-startTime)+"毫秒")
    startTime=+new Date();
    arr=[];
    for(var i=0;i<100000;i++){
        arr.unshift(i);
    }
    endTime=+new Date();
    console.log("調(diào)用unshift方法往數(shù)組中添加100000個(gè)元素耗時(shí)"+(endTime-startTime)+"毫秒")

查看結(jié)果發(fā)現(xiàn)相差好多好多倍,可見中間的性能差異。所以少用unshift。如果一定要用unshift,可以借助Array的reverse方法,先將數(shù)據(jù)push添加到數(shù)組,再執(zhí)行一次reverse,就達(dá)到unshift的效果了。

//reverse性能測(cè)試
    var d=[],s=+new Date;
    for (var i = 0; i <100000; i++) {
        d.push(i)
    };
    d.reverse()
    console.log("調(diào)用reverse方法將數(shù)組里面的100000元素的順序反轉(zhuǎn)耗時(shí):"+(+new Date - s)+"毫秒");

可見reverse方法性能不錯(cuò),可以代替unshift使用。
同樣我們可以對(duì)pop,和shift方法進(jìn)行測(cè)試。

//pop 刪除時(shí)間
    var pop=[];
    for(var i=0;i<100000;i++){
        pop.push(i);
    }
    var e=+new Date;
    console.log(pop)
    for (var i = 0; i <100000; i++) {
        pop.pop();
        
    };
    console.log(pop);
    console.log("pop刪除數(shù)組耗時(shí):"+(+new Date - e)+"毫秒");

    //shift 刪除時(shí)間
    var shift=[];
    for(var i=0;i<100000;i++){
        shift.push(i);
    }
    var f=+new Date;
    console.log(shift)
    for (var i = 0; i <100000; i++) {
        shift.shift();  
    };
    console.log(shift);
    console.log("shift刪除數(shù)組耗時(shí):"+(+new Date - f)+"毫秒");

最后發(fā)現(xiàn)谷歌瀏覽器shift有著良好的性能表現(xiàn),火狐相應(yīng)時(shí)間卻非常慢。

兩者有著巨大的差別。或許兩者有著不同的實(shí)現(xiàn)方式。

結(jié)

1.push推入數(shù)組,放回?cái)?shù)組長(zhǎng)度
2.pop刪除數(shù)組最后一位,返回改項(xiàng)的值
3.shift 刪除數(shù)組的第一項(xiàng),并返回改項(xiàng)的值
4.unshift 從數(shù)組的第一項(xiàng)推入,并返回?cái)?shù)組的長(zhǎng)度
5.push和unshift有著較大的性能差別,采用reverse方式代替unshift方式是不錯(cuò)的選擇。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容