---
# System prepended metadata

title: Array.slice() 擷取片段元素

---

# Array.slice() 擷取片段元素

`slice()` 是 JavaScript 數組方法之一，用於從數組中創建一個新數組，包含原數組中的一部分元素，而不修改原始數組。它的語法如下：

```javascript
array.slice([begin[, end]])
```

- `begin`（可選）：表示從原數組中開始提取元素的位置的索引。如果未指定 `begin`，則從索引 0 處開始提取。如果 `begin` 是負數，它表示從數組末尾開始計數，例如 `-1` 表示數組的最後一個元素。
- `end`（可選）：表示在原數組的哪個索引處結束提取元素（但不包括該索引處的元素）。如果未指定 `end`，`slice()` 會提取到數組的末尾。如果 `end` 是負數，它表示在數組末尾的索引位置。

`slice()` 方法返回一個新數組，包含從原數組中提取的元素。原數組不會被修改。

## 使用方式

```javascript
const fruits = ['apple', 'banana', 'cherry', 'date', 'fig'];

const slicedFruits = fruits.slice(1, 3);
console.log(slicedFruits); // 輸出 ["banana", "cherry"]

const slicedFruits2 = fruits.slice(2);
console.log(slicedFruits2); // 輸出 ["cherry", "date", "fig"]

const slicedFruits3 = fruits.slice(-3, -1);
console.log(slicedFruits3); // 輸出 ["cherry", "date"]
```

## 相關練習

#### Leetcode 2724
Sort By

給定一個數組“arr”和一個函數“fn”，返回一個排序數組“sortedArr”。      
Given an array `arr` and a function `fn`, return a sorted array `sortedArr`.        

您可以假設“fn”僅返回數字，並且這些數字決定“sortedArr”的排序順序。       
You can assume `fn` only returns numbers        
and those numbers determine the sort order of `sortedArr`.      

`sortedArray` 必須按 `fn` 輸出升序排序。        
`sortedArray` must be sorted in ascending order by `fn` output.     

您可能會假設“fn”永遠不會重複給定數組的數字。        
You may assume that `fn` will never duplicate numbers for a given array.       


#### 解決方案

根據函數 fn 的返回值對數組 arr 進行升序排序，並返回排序後的新數組。
```javascript
const sortBy =function(arr, fn) {
    //排序的邏輯
    return arr.slice().sort((a, b) => fn(a) - fn(b));
}
```

- __arr.slice()__       
    沒有傳遞任何參數時，將返回原始數組 arr 的淺拷貝（shallow copy），這是一種常用於復制數組的方法。      
    這意味著它會創建一個新數組，包含原數組中的所有元素，並將這些元素複製到新數組中，但不會影響原始數組。    

- __.sort((a, b) => fn(a) - fn(b))__       
    陣列的 sort 方法，該方法接受一個比較函數作為參數。      
    計算了fn(a) - fn(b)這兩個返回值的差值，這將成為排序的依據。      
=>  如果差值為負數，則 a 應該排在 b 前面，      
    如果差值為正數，則 b 應該排在 a 前面，      
    如果差值為零，則它們保持相對順序不變。 最後，函數返回了排序後的新數組。      
