陣列
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]
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
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"]