JS004. 獲取數組最后一個元素且不改變數組的四種方法


TAG:  Array.length  Array.prototype.reverse()  Array.prototype.slice()  Array.prototype.pop()

Array對象 - pop( )

pop() 方法用於刪除數組的最后一個元素並返回刪除的元素,要點 - 獲取並刪除

let arr = [0, 1, 2, 3]
let element = arr.pop()

console.log('arr: ', arr, ' & arr.length: ', arr.length)
// arr: [0, 1, 2] & arr.length: 3

console.log('element: ', element, ', type: ', typeof(element))
// element: 3, type: Number

 通過 擴展運算符 來執行pop方法,獲取數組最后一個元素的同時不會改變它本身。

var arr = [0,1,2,3]
var element = [...arr].pop()

console.log('arr: ', arr, ', element: ', element)
// arr: [0, 1, 2, 3], element: 3

console.log('arr.length: ', arr.length, ', type: ', typeof(element))
// arr.length: 4, type: Number

數組的實質就是開辟一個棧內存並指向堆中的一個連續的儲存空間,而  [...arr]  從邏輯上來講就是占用一節新的棧內存並在堆內存中存放一個新的數組,而不僅僅是分配一個新的棧並指向已有的堆內存數組,把arr在語法層面展開,所在堆棧的值迭代淺拷貝到新的棧內存並指向新的堆內存中。

需要特別注意的是擴展運算符與 Object.assign( ) 語法相同,都是淺拷貝一層,如果是多維數組就出現問題了。

var a = [[1], [2], [3]]
var b = [...a]
b.shift().shift()    // 1

// 這樣做數組a也受到了影響!
console.log(a)    // [[2], [3]]

如果想深入探究擴展運算符的底層邏輯和擴展使用,建議研讀MDN提供的文檔 MDN展開語法

 

Array對象 - slice( )

slice() 方法可從已有的數組中返回選定的元素

let arr = [0, 1, 2, 3]
let element = arr.slice(-1)

console.log('arr: ', arr, ', element: ', element)
// arr: [0, 1, 2, 3], element: 3

 

Array對象 - reverse( )

reverse() 方法用於顛倒數組中元素的順序。

let arr = [1, 2, 3]
let [element] = arr.reverse()

console.log(elelment)
// 3
console.log(arr)
// [3, 2, 1]

可以看到該方法雖然也可以拿到最后一個元素但同時也會改變數組本身。

巧用擴展運算符,就可以達到不改變數組本身獲取最后一個元素的目的。

let arr = [1, 2, 3]
let [arg] = [...arr].reverse()

console.log(arg)
// 3
console.log(arr)
[1, 2, 3]

 

Array屬性 - length

length 屬性可設置或返回數組中元素的數目。

 

let arr = [0, 1, 2, 3]
let element = arr[arr.length - 1]

console.log('arr.length: ', arr.length, ', element: ', element)
// arr.length: 4, element: 3

 我的其他相關文章:

JS005. 拷貝引用數據類型Array使其指向不同堆的解決方案

ES6:使用解構賦值僅用一行定義多個相同的數組,且指向堆不同(解構賦值)

- END -


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM