---
tags: JS - 練習
---
# 【splice】 、 【slice】練習
:::warning
原型: Array.prototype.splice()
功能: 可以藉由刪除既有元素並/或加入新元素來改變一個陣列的內容。
改變: 會改變原陣列。
參數:
splice(要插入或刪除的索引位置, 要刪除的元素數量, 要插入的元素內容)。
注意:
splice()本身所回傳回來的,會是我們刪除掉的元素陣列。
:::
> splice 範例:
- 指定索引位置、刪除數量、插入內容
```
const studentData = ["王羅傑", "陳會發", "蔡阿嘎", "連世成", "詹關貓"]
const deleteStudents = studentData.splice(1, 2, "雲小寶")
studentData; // ["王羅傑", "雲小寶", "連世成", "詹關貓"]
deleteStudents; // ["陳會發", "蔡阿嘎"]
```
- 指定索引位置
```
const studentData = ["王羅傑", "陳會發", "蔡阿嘎", "連世成", "詹關貓"]
const deleteStudents = studentData.splice(1)
studentData; // ["王羅傑"]
deleteStudents; // ["陳會發", "蔡阿嘎", "連世成", "詹關貓"]
```
- 不刪除並插入數值
```
const studentData = ["王羅傑", "陳會發", "蔡阿嘎", "連世成", "詹關貓"]
const deleteStudents = studentData.splice(1, 0, "張家晟")
studentData; // ["王羅傑", "張家晟", 陳會發", "蔡阿嘎", "連世成", "詹關貓"]
deleteStudents; // []
```
- 倒著使用
```
const studentData = ["王羅傑", "陳會發", "蔡阿嘎", "連世成", "詹關貓"]
const deleteStudents = studentData.splice(-1, 0, "楊慶忠")
studentData; // ["王羅傑", 陳會發", "蔡阿嘎", "連世成", "楊慶忠", "詹關貓"]
deleteStudents; // []
```
### splice 題目:
```
const studentData = ["王羅傑", "陳會發", "蔡阿嘎", "連世成", "詹關貓"]
```
:::info
請按照提供資料,取出介於"王羅傑"與"詹關貓"之間的人名,並在這之間加入"張睿宸"
:::
:::info
請按照提供資料,在"詹關貓"前面加入"許宏偉",並移除"詹關貓"。
:::
---
:::warning
原型: Array.prototype.slice()
功能: 回傳一個新陣列物件,為原陣列選擇的 begin 至 end(不含 end)部分的淺拷貝(shallow copy)。
改變: 原本的陣列將不會被修改。
參數:
slice(哪個索引值開始切, 哪一個索引值結束)。
注意:
不給參數,或只給零,那麼slice()就會把陣列從頭到尾複製一份。
多維陣列的深拷貝會失效。
第二個參數"哪一個索引值結束",表示到該數就停止,並不會取到該數
:::
> slice 範例:
- 兩個參數
```
const studentData = ["王羅傑", "陳會發", "蔡阿嘎", "連世成", "詹關貓", "蔡慶忠"]
const sliceStudents1 = studentData.slice(1, 3)
const sliceStudents2 = studentData.slice(1, 0)
const sliceStudents3 = studentData.slice(2, -2)
const sliceStudents4 = studentData.slice(2, 2)
studentData; // ["王羅傑", "陳會發", "蔡阿嘎", "連世成", "詹關貓"]
sliceStudents1; // ["陳會發", "蔡阿嘎"]
sliceStudents2; // []
sliceStudents3; // ["蔡阿嘎", "連世成"]
sliceStudents4; // []
```
- 不給參數
```
const studentData = ["王羅傑", "陳會發", "蔡阿嘎", "連世成", "詹關貓"]
const sliceStudents = studentData.slice()
const sliceStudentsZero = studentData.slice(0)
studentData; // ["王羅傑", "陳會發", "蔡阿嘎", "連世成", "詹關貓"]
sliceStudents; // ["王羅傑", "陳會發", "蔡阿嘎", "連世成", "詹關貓"]
sliceStudentsZero; // ["王羅傑", "陳會發", "蔡阿嘎", "連世成", "詹關貓"]
```
- 正著取值、倒著取值
```
const studentData = ["王羅傑", "陳會發", "蔡阿嘎", "連世成", "詹關貓"]
const sliceStudents1 = studentData.slice(1)
const sliceStudents2 = studentData.slice(-1)
studentData; // ["王羅傑", "陳會發", "蔡阿嘎", "連世成", "詹關貓"]
sliceStudents1; // ["陳會發", "蔡阿嘎", "連世成", "詹關貓"]
sliceStudents2; // ["詹關貓"]
```
- 多維陣列問題
```
const studentData = [["王羅傑", "陳會發", "蔡阿嘎"], ["連世成", "詹關貓", "蔡慶忠"]]
const sliceStudents = studentData.slice(0)
sliceStudents; // [["王羅傑", "陳會發", "蔡阿嘎"], ["連世成", "詹關貓", "蔡慶忠"]]
sliceStudents[0][0] = "errorPeople"
studentData; // [["errorPeople", "陳會發", "蔡阿嘎"], ["連世成", "詹關貓", "蔡慶忠"]]
sliceStudents; // [["errorPeople", "陳會發", "蔡阿嘎"], ["連世成", "詹關貓", "蔡慶忠"]]
```
### slice 題目:
```
const studentData = ["王羅傑", "陳會發", "蔡阿嘎", "連世成", "詹關貓"]
```
:::info
請按照上述資料,解決"多維陣列問題",讓複製的資料無法同時被更改。
:::
:::info
請按照提供資料,從資料中取出"連世成"
:::
:::info
承上題,若無法得知"連世成"的位置,無法直接將索引值帶入,請透過其他方法取得索引值
:::