---
# System prepended metadata

title: 【splice】 、 【slice】練習
tags: [JS - 練習]

---

---
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
承上題，若無法得知"連世成"的位置，無法直接將索引值帶入，請透過其他方法取得索引值
:::