成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

JS數(shù)組學(xué)習(xí)之splice方法

AbnerMing / 2079人閱讀

摘要:確認(rèn)需要移除的長(zhǎng)度,最小為,確認(rèn)原數(shù)組變化后的新長(zhǎng)度按照索引位置,獲取長(zhǎng)度的新數(shù)組,用于返回對(duì)原數(shù)組進(jìn)行替換新元素。

array.splice(start,deleteCount,item1,item2....)

splice方法從array移除n個(gè)元素(大于或等于0),并且可以用新的item替換被移除的元素。參數(shù)start是從數(shù)組array中移除元素的最開(kāi)始位置(數(shù)組的索引,正負(fù)數(shù)表示方向,負(fù)數(shù)表示從數(shù)組末尾開(kāi)始往前數(shù),但是不論正負(fù),移除的方向始終是索引遞增的方向)。參數(shù)deleteCounts是要移除的元素個(gè)數(shù)(如果設(shè)置為 0,則不會(huì)刪除)。后面的items用來(lái)替換被移除的位置上(可多可少)。splice最終返回一個(gè)包含被移除元素的數(shù)組,并且原數(shù)組也被改變。

splice主要作用是從一個(gè)數(shù)組中刪除元素(改變?cè)瓟?shù)組),slice主要作用是從數(shù)組中復(fù)制一段元素(不改變?cè)瓟?shù)組),兩者有本質(zhì)區(qū)別

用法:

var a = [1,2,3,4,5],b=a.splice(0,2,6,7,8);
//a ==> [6, 7, 8, 3, 4, 5]
//b ==> [1,2]  

原生方法實(shí)現(xiàn)分析:

確認(rèn)開(kāi)始索引位置 start,最小為0。

確認(rèn)需要移除的長(zhǎng)度 deleConuts,最小為0,

確認(rèn)原數(shù)組變化后的新長(zhǎng)度

按照索引位置,獲取deleConuts長(zhǎng)度的新數(shù)組,用于返回

對(duì)原數(shù)組進(jìn)行替換items新元素。

最終代碼實(shí)現(xiàn)

//按照步驟,數(shù)組會(huì)被分成3個(gè)部分,左邊,arr_left,中間被刪除arr_delete,右邊arr_right
Array.prototype.splice = function(start,deletCounts){
    var max = Math.max,
        min = Math.min,
        len = this.length,//數(shù)組長(zhǎng)度
        insertCounts = max(arguments.length - 2 ,0),//用來(lái)替換的數(shù)組的個(gè)數(shù),不包括參數(shù)值中的前2個(gè)
        result = [],//存儲(chǔ)用來(lái)返回的數(shù)組
        ;
    //確定索引開(kāi)始位置
    start = start >= 0 ? start || len + start ;//負(fù)數(shù)表示從數(shù)組末尾開(kāi)始往前數(shù)
    //最多能刪除從索引開(kāi)始到數(shù)組結(jié)束位置 
    deletCounts = max(min(typeof "deletCounts" === "number" ? deletCounts : len ,len - start),0);
    var changeCounts = insertCounts - deletCounts ,//新增-刪除
        new_len = len + changeCounts ;//原數(shù)組變化后的新長(zhǎng)度
    //生成返回的數(shù)組    
    for (var i = 0; i < deletCounts; i++) {
        var item = this[start + i];//從索引開(kāi)始后的元素(包括start)
        if(item !== undefined){
            //超過(guò)原數(shù)組最大索引值會(huì)不存在
            result[i] = item
        }
        if(start + i > len - 1){
            //超過(guò)原數(shù)組最大索引,后續(xù)不需要再處理
            break 
        }
    } 
    //替換被刪除項(xiàng)
    var arr_right_length = len - start - deletCounts;//右邊arr_right長(zhǎng)度
    if(changeCounts > 0 ){
        //新增大于刪除,則將數(shù)組右邊部分arr_right 向右挪動(dòng)差值個(gè)單位,相當(dāng)于右邊的索引都增加 changeCounts(防止有重疊部分,從右往左復(fù)制)
        var i = 1;
        while(arr_right_length){
            this[new_len - i] = this[len - i];
            k ++;
            arr_right_length -- ;
        }
    }else if(changeCounts < 0){
        //新增小于刪除,則將右邊arr_right 向左挪動(dòng)差值個(gè)單位
        var i = start + insertCounts ;//右邊新的索引
        for(var k = 0 ;k < arr_right_length ;k++){
            this[i] = this[i - changeCounts] ;//因?yàn)槭秦?fù)數(shù),所以 i -changeCounts表示更大
            i ++ ;
        }
        this.length = new_len;//需要手動(dòng)修改數(shù)組長(zhǎng)度
    }   
    for(var i = 0;i < insertCounts ; i++){
        //對(duì)新增的部分進(jìn)行賦值處理
        this[start + i] = arguments[2+i]
    }
    //返回被刪除的元素
    return result
}

附上一圖,希望能夠更明了(畫工太拙劣):

不對(duì)的地方還望指導(dǎo),謝謝!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/80723.html

相關(guān)文章

  • php學(xué)習(xí)之留言板

    摘要:用到對(duì)數(shù)據(jù)進(jìn)行刪除,具體請(qǐng)看的編寫相關(guān)姿勢(shì)有發(fā)送請(qǐng)求字符串模板頁(yè)面元素內(nèi)容賦值請(qǐng)求返回到這,整體結(jié)構(gòu)就完成了。 前言 在對(duì)php語(yǔ)法有一定了解之后開(kāi)始,這是第一個(gè)php練手項(xiàng)目,涵蓋的知識(shí)有 公共部分的引用 表單的提交 請(qǐng)求的接收與響應(yīng) interface+implements的使用 基于文件的所處理的增刪改查 json的格式化與字符串序列化 項(xiàng)目地址message boardps...

    biaoxiaoduan 評(píng)論0 收藏0
  • jQuery源碼學(xué)習(xí)之event

    摘要:回調(diào)隊(duì)列中的元素是對(duì)象,代表一個(gè)事件回調(diào),擁有多個(gè)屬性,如等等,其中是回調(diào)函數(shù),在觸發(fā)時(shí)通過(guò)傳遞,具體的在后面講。類型是時(shí)鍵表示事件名,規(guī)則同上,鍵值表示事件觸發(fā)時(shí)的回調(diào)函數(shù)。 jQuery源碼學(xué)習(xí)之event jQuery的事件機(jī)制為異步回調(diào),事件監(jiān)聽(tīng)的屬性、參數(shù)和回調(diào)的等保存在Data實(shí)例中,在元素上保存該對(duì)象的引用。有方法handle,內(nèi)部執(zhí)行dispatch;有屬性events...

    XboxYan 評(píng)論0 收藏0
  • JS學(xué)習(xí)之Object

    摘要:文中的多為構(gòu)造函數(shù)原型對(duì)象屬性為函數(shù)的專屬屬性,表示函數(shù)的原型對(duì)象。關(guān)于各種數(shù)據(jù)類型的屬性的展示對(duì)象的構(gòu)造器函數(shù)該屬性指向創(chuàng)建該對(duì)象原型的構(gòu)造函數(shù)。對(duì)對(duì)象的凍結(jié)狀態(tài)的設(shè)置和判斷,前者讓凍結(jié)對(duì)象,后者判斷對(duì)象是否被凍結(jié)。 前言 上篇文章介紹了JS的對(duì)象,本文將介紹Object這個(gè)基類,主要介紹其屬性和方法(其實(shí)這些在MDN里都有^_^,點(diǎn)擊這里可以直通MDN)。好了廢話不多說(shuō)了,直接開(kāi)始...

    qujian 評(píng)論0 收藏0
  • JS學(xué)習(xí)之JSON數(shù)據(jù)格式

    摘要:簡(jiǎn)析簡(jiǎn)介,是一種數(shù)據(jù)格式而不是編程語(yǔ)言,它和并沒(méi)有從屬關(guān)系,任何編程語(yǔ)言都可以使用語(yǔ)法規(guī)則分為三類簡(jiǎn)單值與語(yǔ)法相同,可以在中表示字符串,數(shù)值,布爾值和,但是其不支持?jǐn)?shù)值字符串對(duì)象鍵值和鍵名都得用雙引號(hào)數(shù)組解析和序列化目標(biāo)對(duì)象,過(guò)濾器,字符串 JSON簡(jiǎn)析 1.簡(jiǎn)介 JSON,是一種數(shù)據(jù)格式而不是編程語(yǔ)言,它和JavaScrip并沒(méi)有從屬關(guān)系,任何編程語(yǔ)言都可以使用JSON; 2.語(yǔ)法...

    isaced 評(píng)論0 收藏0
  • 集合框架源碼學(xué)習(xí)之HashMap(JDK1.8)

    摘要:所謂拉鏈法就是將鏈表和數(shù)組相結(jié)合。若遇到哈希沖突,則將沖突的值加到鏈表中即可。在編寫程序中,要盡量避免。 目錄: 0-1. 簡(jiǎn)介 0-2. 內(nèi)部結(jié)構(gòu)分析   0-2-1. JDK18之前   0-2-2. JDK18之后 0-3. LinkedList源碼分析   0-3-1. 構(gòu)造方法   0-3-2. put方法   0-3-3. get方法   0-3-4. resize方法 ...

    yangrd 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<