陣列

javascript 中 陣列的 key 只會是數字,通常就等於 index ,而物件就像是可用文字表示的 key。一般而言,直接使用物件能表達的訊息會更多。但若用陣列迴圈就代表直接處理 value 而不用考慮 key 值,在處理上會單純一點。

  • 陣列資料類型是屬於物件,但Array這個包裝物件的typeof Array也是回傳'function'

  • JavaScript中並沒有關聯陣列(關聯陣列指的是"鍵-值"的資料陣列,也常被稱為字典(dictionary)的資料陣列)

  • 雖然並沒有規定說,你只能在同一個陣列中使用單一種資料類型。但是,在陣列中儲存多種不同的資料類型,絕對是個壞主意。

拷貝(copy)陣列

把原有的陣列指定給另一個變數(或常數)並不會讓它成為一個全新的陣列,這是因為當指定值是陣列時,是指定到同一個參照,也就是同一個陣列

const aArray = [1, 2, 3]
const bArray = aArray

aArray[0] = 100

console.log(bArray) //[100, 2, 3]
  • 展開(spread)運算符(淺拷貝推薦方法)

const aArray = [1, 2, 3]
const copyArray = [...aArray]

深拷貝用 newArticles = JSON.parse(JSON.stringify(articles))

splice

刪除或增加陣列中的成員,以此來改變原先的陣列

語法: array.splice(start, deleteCount[, item1[, item2[, ...]]])

這個方法的參數值會比較多用起來會複雜些,先說明它的參數如下:

  • start 是開始要作這件事的索引值,左邊從0開始,如果是負數則從右邊(最後一個)開始計算

  • deleteCount 是要刪除幾個成員(值),最少為0代表不刪除成員(值)

  • item1... 這是要加進來的成員(值),不給這些成員(值)的話,就只會作刪除的工作,不會新增成員(值)。注意如果是陣列值,會變成巢狀(子)陣列成員(值)。

//插入一個新成員(值)在某個值之後
const dictionary = ['a', 'b', 'd', 'e', 'f']

//先找到b的位置,等會要在b後面插入c
const bIndex = dictionary.indexOf('b')

//bIndex大於-1代表有存在,插入c,不刪除
if (bIndex > -1) {
    dictionary.splice(bIndex+1, 0, 'c')
}

//用新成員(值)取代某個值
const dictionary = ['a', 'b', 'x', 'd', 'e']

//先找到x的位置,等會要用c來取代x
const xIndex = dictionary.indexOf('x')

//bIndex大於-1代表有存在,插入c,刪除x
if (bIndex > -1) {
    dictionary.splice(xIndex, 1, 'c')
}

pop與push、shift與unshift

  • pop 取出最後一個元素(同時刪除)

  • shift 取出第一個元素(同時刪除)

  • push 加入一個元素到陣列最後方

  • unshift 加入一個元素到陣列最前方

const aArray = [1, 2, 3]
const popValue = aArray.pop()

console.log(aArray) //[1,2]
console.log(popValue) //3

陣列合併 concat ( 返回一个新数组)

const strArray = ['a', 'b', 'c']
const numArray = [1, 2, 3]

const newArray = strArray.concat(numArray)
console.log(newArray)


//展開運算符 相等的作法
const newArray2 = [...strArray, ...numArray]
console.log(newArray2)

陣列轉字串 join

const data=['a','b','c']
console.log(data.join(' ')) //a b c

Slice ( 返回一个新数组)

截取字串或陣列的一部份

const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];

console.log(animals.slice(2));
// expected output: Array ["camel", "duck", "elephant"]

console.log(animals.slice(2, 4));
// expected output: Array ["camel", "duck"]
// (不含 end)

console.log(animals.slice(1, 5));
// expected output: Array ["bison", "camel", "duck", "elephant"]

Last updated