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