中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現和使用JS數組push、unshift、pop、shift方法

發布時間:2020-07-29 13:37:25 來源:億速云 閱讀:218 作者:小豬 欄目:web開發

這篇文章主要講解了如何實現和使用JS數組push、unshift、pop、shift方法,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

尾部添加(push)

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

從解釋中可以看出,push方法只要將要添加的元素依次放到數組的最后即可,不會改變原有數組元素的索引。所以循環參數列表,將新元素依次放到數組的最后即可。

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() 方法將一個或多個元素添加到數組的開頭,并返回該數組的新長度(該方法修改原有數組)。

向數組的頭部添加元素,數組的長度也會發生變化,但不像尾部添加的操作,數組原有元素索引不改變。做頭部添加的操作,需要將原有元素的索引向右移動。

例如只添加一位,則需要將數組的每個元素的索引依次向右移一位,假設原來數組長度是4,頭部添加一個元素,長度變為5.

所以現在就變成:array.length = 5,而目前array[5 - 1]是最后一個元素,現在由于依次往后移動,所以,array[5]必須是最后一個元素

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

過程如下

如何實現和使用JS數組push、unshift、pop、shift方法

具體代碼實現:

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 ]

但上面的代碼只實現了一個元素的頭部添加,unshift方法支持添加多個元素。例如:

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

針對這樣的情況,需要知道傳入了幾個參數,可以從arguments對象入手,思路還是上面的思路:
先以最后生成的數組長度為基準從后往前循環,依次移動元素,然后將新元素依次放到數組的頭部

新數組的長度等于原數組的長度 + 參數的個數,從后往前循環,將原數組的最后一位,移動到新數組的最后一位,

因為需要在頭部插入數量為入參個數的元素,所以循環的起點為原數組的長度 + 參數的個數,循環的終點為入參的個數。

但由于索引總是比長度少一位,所以起點和終點都需要減1。

現在可以先把循環移動的邏輯寫出來

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]
}

完整的代碼如下:

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 的最后一個元素,把數組長度減 1,并且返回它刪除的元素的值。如果數組已經為空,則 pop() 不改變數組,
并返回 undefined 值。`

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

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() 方法用于把數組的第一個元素從其中刪除,并返回第一個元素的值。

頭部刪除,會改變原有數組元素的索引,也就是將未被刪除的元素索引都往左移一位,首先要將被刪除的元素記錄下來便于返回,之后將數組第一個元素指向null,

最后循環數組,移動索引。

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 ]

看完上述內容,是不是對如何實現和使用JS數組push、unshift、pop、shift方法有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

js un
AI

崇礼县| 融水| 玛多县| 高台县| 舟曲县| 东方市| 同仁县| 福清市| 大化| 丰镇市| 苍山县| 伊宁县| 巩义市| 康马县| 凤山市| 女性| 清远市| 宝兴县| 礼泉县| 彝良县| 乌兰县| 铜川市| 胶州市| 潞西市| 噶尔县| 修武县| 平定县| 陆良县| 涟源市| 兴和县| 长宁县| 登封市| 宁蒗| 文登市| 德钦县| 菏泽市| 安康市| 普陀区| 丹巴县| 花莲市| 万荣县|