# Array.prototype.slice()
定義: slice()
方法會回傳一個新陣列物件,為原陣列選擇之 begin 至 end(不含 end)部分的淺拷貝(shallow copy)。而原本的陣列將不會被修改。
slice 中文是「切片」,既然是用在陣列的方法,代表是把陣列的某些部分切出來,像是切長條蛋糕那樣
方法可以傳兩個參數給他,告訴他要傳哪個部分,參數分別是「開始的索引值」、「結束的索引值」
而回傳的部分,將會是:開始索引值的資料 到 結束索引值前一個資料
實際語法是這樣:
arr.slice([begin[, end]]) |
例如下面的例子:
const animals = ["ant", "bison", "camel", "duck", "elephant"]; | |
console.log(animals.slice(2)); // 回傳第三個元素之後的元素 | |
// Expected output: Array ["camel", "duck", "elephant"] | |
console.log(animals.slice(2,3)); // 回傳第三個元素 | |
// Expected output: Array ["camel"] | |
console.log(animals.slice(2, 4)); // 回傳第三個元素與第四個元素 | |
// Expected output: Array ["camel", "duck"] | |
console.log(animals.slice(-2)); // 回傳倒數第二個元素到最後一個元素 | |
// Expected output: Array ["duck", "elephant"] | |
console.log(animals.slice(2, -1)); // 回傳第三個元素到倒數第二個元素 | |
// Expected output: Array ["camel", "duck"] | |
console.log(animals.slice()); // 淺拷貝所有元素並且回傳 | |
// Expected output: Array ["ant", "bison", "camel", "duck", "elephant"] |
# Array.prototype.splice()
定義: splice()
方法可以藉由刪除既有元素並/或加入新元素來改變一個陣列的內容。
splice 的中文翻譯為 「拼接」,代表著可以任意去操作陣列內各個部分的資料,包含刪除、提取、新增
語法是這樣:
array.splice(start[, deleteCount[, item1[, item2[, ...]]]]) |
幾個參數意思分別是:
- start:起始的位置 (陣列索引值)
- deleteCount:從起始位置後,總共要切出幾筆資料,如果設定為 0,則不會切除,如果不設定,則會從起始元素切到最後一個元素。
- 一堆的 item:從起始位置要塞入的值,如果有刪除的資料,會先把資料刪除之後再塞這些東西
一步一步來示範參數的使用:
- 設定 start
let data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; | |
const result = data.splice(5); | |
console.log("result", result); // [5, 6, 7, 8, 9, 10] | |
console.log("data", data); // [0, 1, 2, 3, 4] |
先定義一組數列資料,從 0
一直到 10
,再來使用 splice
方法在第一個參數只設定 5
。
結果:
方法本身會把第五個參數到最後一個參數,回傳出來
並且原始的陣列,只會剩下沒被選到的資料
- 設定 start 跟 deleteCount
let data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; | |
const result = data.splice(5, 3); | |
console.log("result", result); // [5, 6, 7] | |
console.log("data", data); // [0, 1, 2, 3, 4, 8, 9, 10] |
結果:
方法會把 index = 5
開始往後抓 3 筆資料回傳出來
原始的陣列一樣會只剩下沒被選到的資料
- 設定 start 、deleteCount 與 item 參數
let data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; | |
const result = data.splice(5, 3, "第一個 item", "第二個 item"); | |
console.log("result", result); // [5, 6, 7] | |
console.log("data", data); // [0, 1, 2, 3, 4, ' 第一個 item', ' 第二個 item', 8, 9, 10] |
結果:
輸出資料與第二個設定一樣是 index = 5
開始往後抓 3 筆資料
不過原始的陣列在「被拿掉資料後」,在 splice 方法第一個參數 ( index = 5
) 位置,塞了兩筆資料進去
- 取代某個位置的資料的值
我們可以依據第三種作法所學到的概念,進而做到把某個 index 的資料值取代掉
例如要把 index = 7
的資料,改變成 "7代目"
的話,可以這樣寫
let data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; | |
data.splice(7, 1, "7代目"); | |
console.log("data", data); // [0, 1, 2, 3, 4, 5, 6, '7 代目 ', 8, 9, 10] |
如果不知道方法參數的用意,第一次看到這個函數大概不知道為什麼是這樣設定
data.splice(7, 1, "7代目");
意思是,從第 index = 7
開始,先刪掉 1
筆資料 ,並且在 index = 7
的位置塞入 "7代目"
字串
以上就是 slice 與 splice 的基本用法,希望做完筆記的我之後不會再忘記 XD