前言
大家好!不知道大家怎麼樣昂,反正每當我在做專案或者刷題時,總會遇到一些讓我頭疼的問題,就是關於陣列和字串的處理方法,它們看似相似,實則大有乾坤。今天,我決定整理一篇筆記,專門用來總結那些常讓人記錯的陣列和字串的操作,希望能幫到跟我一樣時常對此感到煩惱的友友們。
一、定義與初始化
先看看自己能不能回答的出來下面的問題,雖然乍一看很簡單,但是要好好回答卻總會腦子短路。
提問:
我們可以直接透過單引號或雙引號初始化什麼?
陣列的元素是如何分隔的?字串裡的空格算不算獨立的元素?
解答:
只有字串才能透過 'hello'
或 "world"
這樣的方式直接初始化。而陣列呢,必須用 [1, 2, 'three']
這樣的形式,每個元素之間要用逗號 ,
分開。至於字串裡的空格嘛,它只是字串的一部分,不是一個單獨的元素。
示例:
// 初始化字串 let str = "Hello"; // 初始化陣列 let arr = [1, 2, 3];
二、長度屬性
提問:
陣列和字串的長度怎麼獲取?是不是都叫
.length
呢?
解答:
沒錯,兩者獲取長度的方法都叫做 .length
,但是,千萬記得這是它們各自的屬性,並不是通用的!
示例:
let str = "Hello"; let arr = [1, 2, 3]; console.log(str.length); // 5 console.log(arr.length); // 3
三、索引訪問
提問:
怎麼訪問陣列或字串的第一個和最後一個元素?
訪問字串和陣列的方式是不是一樣的?
解答:
第一個元素訪問很簡單,不管是陣列還是字串,都是 arr[0]
或者 str[0]
。最後一個元素嘛,陣列是 arr[arr.length - 1]
,字串是 str[str.length - 1]
。訪問方式是一樣的,都是用方括號加下標,不過,字串返回的是單個字元,陣列可是任何型別的資料!
示例:
let str = "Hello"; let arr = [1, 2, 3]; console.log(str[0]); // "H" console.log(arr[0]); // 1 console.log(str[str.length - 1]); // "o" console.log(arr[arr.length - 1]); // 3
四、遍歷與迭代
提問:
遍歷陣列和字串有什麼常用的方法?它們完全一樣嗎?
怎樣區分
for...of
和for...in
?
解答:
陣列可以用 for
迴圈、for...of
、forEach()
遍歷,字串也差不多,但因為它是不可變的字元序列,所以 for...of
更常用。至於 for...in
,它更適合用於物件,包括陣列獲取鍵值,但在字串上用的話,會遍歷每個字元的索引。
示例:
let str = "Hello"; let arr = [1, 2, 3]; for (let char of str) { console.log(char); } for (let elem of arr) { console.log(elem); }
五、拼接與連線
提問:
陣列和字串拼接方法有何不同?誰有
join()
方法?字串可以用
+
拼接,那陣列呢?
解答:
字串拼接用 +
就行了,如 str1 + str2
。陣列則用 join()
方法把元素連起來,比如 arr.join(',')
。陣列不能直接用 +
拼接,但兩個陣列相加會被轉成字串再拼接,這不是陣列的拼接,而是字串拼接行為。
示例:
let str1 = "Hello"; let str2 = "World"; let arr = ['Hello', 'World']; console.log(str1 + " " + str2); // "Hello World" console.log(arr.join("-")); // "Hello-World"
六、切割方法
這部分對於我個人來說最容易混淆,不知道大家怎麼樣。總之先解答提問前,我先把所涵蓋的方法都基本地介紹一下。
提問:
陣列的
splice
和slice
方法有什麼區別?字串的
split
和slice
方法又分別是什麼?
基礎知識:
一、陣列地
splice
方法splice
返回一個包含被刪除元素的新陣列。如果未刪除任何元素,則返回空陣列。start - 要新增/刪除專案的起始位置。
deleteCount (可選) - 從 start 開始要刪除的項數。如果設為 0 或省略,則不會刪除任何元素。
item1, ..., itemX (可選) - 要新增到陣列中的新元素。如果沒有提供,則只會刪除元素。
二、陣列的
slice
方法slice
返回一個新的陣列,包含了從開始到結束的所有元素的淺複製。原始陣列不會被修改。start (可選) - 開始切片的位置。如果省略,那麼切片開始於陣列的第一個元素。
end (可選) - 切片結束的位置(不包括此位置)。如果省略,那麼切片會一直持續到陣列的最後一個元素。
三、字串的
split
方法split
返回一個由子字串組成的陣列,這些子字串是透過將字串分割成多個部分建立的,分割依據是提供的分隔符或模式。separator - 一個字串或正規表示式,作為確定拆分點的模式。
limit (可選) - 最大分割次數。如果省略,則所有可能的分割都會執行。
四、字串的
slice
方法slice
返回一個新的字串,這個字串是從原字串中切片得到的。start - 開始切片的位置。
end (可選) - 結束切片的位置(不包括此位置)。
回憶完了上面地內容,再來看看下面的解答是不是這麼回事吧。
解答:
陣列的 splice
方法允許你向陣列中新增或移除專案,同時返回被移除的專案。它會改變原陣列。而 slice
方法則是從已有的陣列中返回選定的元素到一個新的陣列,原陣列不會被修改。
字串的 split
方法是將字串分割成字串陣列,而 slice
方法則用於提取字串的某個部分,並以新的字串形式返回。
示例:
// 陣列的 splice 和 slice 方法 let numbers = [1, 2, 3, 4, 5]; let removedElements = numbers.splice(1, 2); // 移除索引1和2的元素 console.log(numbers); // [1, 4, 5] console.log(removedElements); // [2, 3] let slicedNumbers = numbers.slice(0, 2); // 從索引0開始到索引1,不包括2 console.log(slicedNumbers); // [1, 4] // 字串的 split 和 slice 方法 let text = "Hello, World!"; let words = text.split(", "); // 根據逗號和空格分割 console.log(words); // ["Hello", "World!"] let partOfText = text.slice(7, 12); // 提取索引7到11的字元,不包括12 console.log(partOfText); // "World"
七、相互轉換
提問:
怎麼把陣列變成字串?反過來呢?
解答:
陣列可以呼叫 toString()
或 join()
變成字串。字串可以透過 Array.from()
或 str.split('')
轉換為陣列。
示例:
let arr = [1, 2, 3]; let str = arr.toString(); console.log(str); // "1,2,3" let str2 = "Hello"; let arr2 = Array.from(str2); console.log(arr2); // ["H", "e", "l", "l", "o"]
八、進階技巧
提問:
怎樣動態拼接陣列?字串的模板字面量是什麼?
解答:
使用 reduce()
方法可以動態構建字串,配合 slice()
調整格式。模板字面量 (`
) 可以在字串中嵌入變數,使用 ${}
插入變數值,讓字串構造更直觀。
示例:
let arr = [1, 2, 3]; let str = arr.reduce((acc, curr) => acc + '-' + curr, '').slice(1); console.log(str); // "1-2-3" let name = "John"; let greeting = `Hello, ${name}!`; console.log(greeting); // "Hello, John!"
結語
透過這篇文章,希望我們都能更清楚地理解陣列與字串的特性,不再在處理它們的時候感到迷茫。記得,多動手練習,才能真正掌握這些知識。一起加油!