最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS數(shù)組push、unshift、pop、shift方法的實(shí)現(xiàn)與使用方法示例

 更新時(shí)間:2020年04月29日 10:28:58   作者:nero  
這篇文章主要介紹了JS數(shù)組push、unshift、pop、shift方法,結(jié)合實(shí)例形式分析了JS數(shù)組push、unshift、pop、shift方法針對(duì)數(shù)組添加、刪除等相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了JS數(shù)組push、unshift、pop、shift方法的實(shí)現(xiàn)與使用方法。分享給大家供大家參考,具體如下:

尾部添加(push)

push() 方法將一個(gè)或多個(gè)元素添加到數(shù)組的末尾,并返回該數(shù)組的新長(zhǎng)度。

從解釋中可以看出,push方法只要將要添加的元素依次放到數(shù)組的最后即可,不會(huì)改變?cè)袛?shù)組元素的索引。所以循環(huán)參數(shù)列表,將新元素依次放到數(shù)組的最后即可。

Array.prototype._push = function(...value) {
 for (var i = 0; i < arguments.length; i++) {
 this[this.length] = arguments[i]
 }
 return this.length
}
var arr = [1, 2, 3, 4]
arr._push(9, 8)
console.log(arr) // [ 1, 2, 3, 4, 9, 8 ]

頭部添加(unshift)

unshift() 方法將一個(gè)或多個(gè)元素添加到數(shù)組的開頭,并返回該數(shù)組的新長(zhǎng)度(該方法修改原有數(shù)組)。

向數(shù)組的頭部添加元素,數(shù)組的長(zhǎng)度也會(huì)發(fā)生變化,但不像尾部添加的操作,數(shù)組原有元素索引不改變。做頭部添加的操作,需要將原有元素的索引向右移動(dòng)。

例如只添加一位,則需要將數(shù)組的每個(gè)元素的索引依次向右移一位,假設(shè)原來數(shù)組長(zhǎng)度是4,頭部添加一個(gè)元素,長(zhǎng)度變?yōu)?.

所以現(xiàn)在就變成:array.length = 5,而目前array[5 - 1]是最后一個(gè)元素,現(xiàn)在由于依次往后移動(dòng),所以,array[5]必須是最后一個(gè)元素

所以我們可以從數(shù)組的最后一位的下一位往前循環(huán),將array[i]賦值為array[i - 1],循環(huán)到1停止,將array的第0項(xiàng)賦值為需要添加的值。

過程如下

具體代碼實(shí)現(xiàn):

Array.prototype._unshift = function(value) {
 for (let i = this.length; i > 0; i--) {
 this[i] = this[i - 1]
 }
 this[0] = value
 return this.length
}
var arr = [1, 2, 3, 4]
arr._unshift(8)
console.log(arr); // [ 8, 1, 2, 3, 4 ]

但上面的代碼只實(shí)現(xiàn)了一個(gè)元素的頭部添加,unshift方法支持添加多個(gè)元素。例如:

var arr = [1, 2, 3, 4]
arr.unshift(8, 7)
console.log(arr); // [ 8, 7, 1, 2, 3, 4 ]

針對(duì)這樣的情況,需要知道傳入了幾個(gè)參數(shù),可以從arguments對(duì)象入手,思路還是上面的思路:
先以最后生成的數(shù)組長(zhǎng)度為基準(zhǔn)從后往前循環(huán),依次移動(dòng)元素,然后將新元素依次放到數(shù)組的頭部

新數(shù)組的長(zhǎng)度等于原數(shù)組的長(zhǎng)度 + 參數(shù)的個(gè)數(shù),從后往前循環(huán),將原數(shù)組的最后一位,移動(dòng)到新數(shù)組的最后一位,

因?yàn)樾枰陬^部插入數(shù)量為入?yún)€(gè)數(shù)的元素,所以循環(huán)的起點(diǎn)為原數(shù)組的長(zhǎng)度 + 參數(shù)的個(gè)數(shù),循環(huán)的終點(diǎn)為入?yún)⒌膫€(gè)數(shù)。

但由于索引總是比長(zhǎng)度少一位,所以起點(diǎn)和終點(diǎn)都需要減1。

現(xiàn)在可以先把循環(huán)移動(dòng)的邏輯寫出來

Array.prototype._unshift = function(...value) {
 for (var i = (this.length + arguments.length - 1); i > arguments.length - 1; i--) {
 this[i] = this[i - arguments.length]
 }
}

再思考一下,由于上一步已經(jīng)移動(dòng)完了,數(shù)組頭部的位置已經(jīng)空出來了,第二步是有幾個(gè)參數(shù)就要插入幾個(gè)元素。所以現(xiàn)在只需要循環(huán)插入就好:

for(var k = 0; k < arguments.length; k++) {
 this[k] = arguments[k]
}

完整的代碼如下:

Array.prototype._unshift = function(...value) {
 for (var i = (this.length + arguments.length - 1); i > arguments.length - 1; i--) {
 this[i] = this\[i - arguments.length]
 }
 for(var k = 0; k < arguments.length; k++) {
 this[k] = arguments[k]
 }
 return this.length
}
var arr = [1, 2, 3, 4\]
arr._unshift(9, 8)
console.log(arr); // [ 9, 8, 1, 2, 3, 4 ]

尾部刪除 (pop)

`pop() 方法將刪除 arrayObject 的最后一個(gè)元素,把數(shù)組長(zhǎng)度減 1,并且返回它刪除的元素的值。如果數(shù)組已經(jīng)為空,則 pop() 不改變數(shù)組,
并返回 undefined 值。`

這個(gè)很好實(shí)現(xiàn),按照定義一步一步做就可以。首先,記錄下最后一個(gè)元素,便于返回,之后從數(shù)組中刪除最后一個(gè)元素,
將其指向null釋放掉,然后將數(shù)組的長(zhǎng)度減1,最后判斷一下是否為空數(shù)組。

Array.prototype._pop = function () {
 if (!this.length) {
 return undefined
 }
 var end = this[this.length - 1]
 this[this.length - 1] = null
 this.length = this.length - 1
 return end
}
var arr = [1, 2, 3, 4]
arr._pop()
console.log(arr); // [ 1, 2, 3 ]

頭部刪除(shift)

shift() 方法用于把數(shù)組的第一個(gè)元素從其中刪除,并返回第一個(gè)元素的值。

頭部刪除,會(huì)改變?cè)袛?shù)組元素的索引,也就是將未被刪除的元素索引都往左移一位,首先要將被刪除的元素記錄下來便于返回,之后將數(shù)組第一個(gè)元素指向null,

最后循環(huán)數(shù)組,移動(dòng)索引。

Array.prototype._shift = function () {
 if (!this.length) {
 return undefined
 }
 var start = this[0]
 this[0] = null
 for(var i = 0; i < this.length - 1; i++) {
 this[i] = this[i + 1]
 }
 this.length = this.length - 1
 return start
}
var arr = [1, 2, 3, 4]
arr._shift()
console.log(arr); // [ 2, 3, 4 ]

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《javascript面向?qū)ο笕腴T教程》、《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Echarts基本用法_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Echarts基本用法_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Echarts基本用法,詳解的介紹了Echarts的基本用法和實(shí)例,有興趣的可以了解一下
    2017-08-08
  • Babel 入門教程學(xué)習(xí)筆記

    Babel 入門教程學(xué)習(xí)筆記

    Babel是一個(gè)廣泛使用的轉(zhuǎn)碼器,可以將ES6代碼轉(zhuǎn)為ES5代碼,本篇文章主要介紹了Babel 入門教程學(xué)習(xí)筆記,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • JavaScript實(shí)現(xiàn)JSON合并操作示例【遞歸深度合并】

    JavaScript實(shí)現(xiàn)JSON合并操作示例【遞歸深度合并】

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)JSON合并操作,結(jié)合實(shí)例形式分析了javascript基于遞歸深度實(shí)現(xiàn)json合并操作相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-09-09
  • webpack分離css單獨(dú)打包的方法

    webpack分離css單獨(dú)打包的方法

    這篇文章主要介紹了webpack分離css單獨(dú)打包的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • 深入淺出ES6之let和const命令

    深入淺出ES6之let和const命令

    這篇文章主要介紹了ES6中l(wèi)et和const命令的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,對(duì)es6 let const相關(guān)知識(shí)感興趣的朋友一起看下吧
    2016-08-08
  • 只要1K 純JS腳本送你一朵3D紅色玫瑰

    只要1K 純JS腳本送你一朵3D紅色玫瑰

    這篇文章主要介紹了只要1K大小,純JS腳本送你一朵3D玫瑰花,屬于你的情人節(jié)專屬玫瑰,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Fullpage.js固定導(dǎo)航欄-實(shí)現(xiàn)定位導(dǎo)航欄

    Fullpage.js固定導(dǎo)航欄-實(shí)現(xiàn)定位導(dǎo)航欄

    FullPage.js 是一個(gè)簡(jiǎn)單而易于使用的插件,用來創(chuàng)建全屏滾動(dòng)網(wǎng)站(也被稱為單頁(yè)網(wǎng)站)。接下來通過本文給大家介紹Fullpage.js固定導(dǎo)航欄-實(shí)現(xiàn)定位導(dǎo)航欄,對(duì)fullpage.js導(dǎo)航欄相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2016-03-03
  • 微信小程序?qū)崿F(xiàn)數(shù)字滾動(dòng)動(dòng)畫

    微信小程序?qū)崿F(xiàn)數(shù)字滾動(dòng)動(dòng)畫

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)數(shù)字滾動(dòng)動(dòng)畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • JavaScript中object和Object的區(qū)別(詳解)

    JavaScript中object和Object的區(qū)別(詳解)

    下面小編就為大家?guī)硪黄狫avaScript中object和Object的區(qū)別(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • Javascript正則表達(dá)式實(shí)現(xiàn)輸入框驗(yàn)證信息功能實(shí)例

    Javascript正則表達(dá)式實(shí)現(xiàn)輸入框驗(yàn)證信息功能實(shí)例

    正則表達(dá)式是用于匹配字符串中字符組合的模式,在JavaScript中正則表達(dá)式也是對(duì)象,這篇文章主要給大家介紹了關(guān)于Javascript正則表達(dá)式實(shí)現(xiàn)輸入框驗(yàn)證信息功能的相關(guān)資料,需要的朋友可以參考下
    2024-05-05

最新評(píng)論

池州市| 高雄县| 温泉县| 上犹县| 常熟市| 光山县| 四会市| 乌苏市| 南和县| 兴化市| 宁化县| 亳州市| 安平县| 四子王旗| 温宿县| 长春市| 阿鲁科尔沁旗| 安福县| 郸城县| 宜兴市| 东阳市| 塘沽区| 格尔木市| 安多县| 高邑县| 大竹县| 仁化县| 合肥市| 久治县| 交口县| 咸丰县| 福海县| 双城市| 平江县| 类乌齐县| 阳朔县| 景东| 阿坝县| 兴国县| 施秉县| 阿拉善右旗|