# 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 前面,
如果差值為零,則它們保持相對順序不變。 最後,函數返回了排序後的新數組。