今天我們繼續來介紹 Javascirpt 數組中的方法,也是數組系列的第四篇文章,因為數組的方法眾多,每篇文章我們都對數組的每個方法都有比較細緻的描述,只要你能夠從中成長一點點,那我們的目的就達到了,學習是一個持續的,漸進的過程。每天進步一點點,最終會有大成就。 直接進入主題 數組的轉換 我們在項目 ...
今天我們繼續來介紹 Javascirpt 數組中的方法,也是數組系列的第四篇文章,因為數組的方法眾多,每篇文章我們都對數組的每個方法都有比較細緻的描述,只要你能夠從中成長一點點,那我們的目的就達到了,學習是一個持續的,漸進的過程。每天進步一點點,最終會有大成就。
直接進入主題
數組的轉換
我們在項目的開發過程中,數據類型之間的轉換有著非常重要的作用,而數組轉換成其他數據類型是我們常見的一種。
toString
該方法是對數組轉換成字元串,數組的每一個元素都會調用 「toString」方法 ,返回一個新字元串。該字元串是以數組中的每一個元素的字元串形式拼接而成,且元素之間用逗號分隔。
定義沒看懂,我們看一個例子肯定立刻就明白!
//語法
array.toString()
//案例1
const numbers = [1, 2, 3, 4, 5];
const result = numbers.toString();
console.log(result); //1,2,3,4,5
console.log(typeof result); //string
//案例2
const numbers = ["A", "B", "C"];
const result = numbers.toString();
console.log(result); //A,B,C
console.log(typeof result); //string
//利用 reduce 方法模擬 toString 的執行過程
const numbers = [1, 2, 3, 4, 5];
const result = numbers.reduce((prev, current) => {
return prev.toString() + "," + current.toString();
});
console.log(result); //1,2,3,4,5
看到這裡應該會有人疑問,是不是只能用逗號分隔呢?如果我用其它字元分隔可行嗎?可以告訴你「toString」方法肯定是不行了,但是我們可以利用其他方法進行。
老規矩,我們還是會在每個方法的後面看看相容。
tostring相容
join
該方法也是將一個數組轉換成字元串,返回一個新的字元串。
方法會將數組的每一個元素轉換成字元串,然後再用給定的字元去拼接成一個新的字元串返回給我們。
該方法接受一個參數:就是我們給定的分隔符。
//語法
array.join(separator)
雖說語法看上去比較簡單,但是有幾點我們需要註意的
- 參數是可選的,如果沒有參數預設為逗號(,)
- 參數可以為空字元串(""),這時會返回一個沒有任何字元分隔的字元串
- 如果數組的元素中有 undefined 或者null,則會被轉化為空字元串("")
- 參數可以為空格,元素會以空格分隔
const numbers = [1, 2, 3, 4, 5];
const result1 = numbers.join();
console.log(result1);//1,2,3,4,5
const result2 = numbers.join("");
console.log(result2);//12345
const result3 = numbers.join(" ");
console.log(result3);//1 2 3 4 5
const result4 = numbers.join("-");
console.log(result4);//1-2-3-4-5
const result5 = numbers.join("A");
console.log(result5);//1A2A3A4A5
這裡我們說到了數組轉換為字元串,那麼字元串如何轉換成數組呢?感興趣的小伙伴可以自己去瞭解下。
「sort」方法的相容性如何呢?直接上圖。
相容
數組的排序
數組的排序用到的場景有很多,比如表格的升序與降序,數據從大到小排列或者按照某些規則去排列等等都會用到排序,如何有效到使用數據到排序方法,首先你要對這些方法有一定的瞭解才能使用比較恰當的方法。
reverse
從名稱我們應該就能猜出該方法的作用,該方法就是將數組中的元素顛倒順序。
//語法
array.reverse()
//案例
const numbers = [1, 2, 3, 4, 5];
numbers.reverse();
console.log(numbers); //[5, 4, 3, 2, 1]
方法相對比較簡單,也沒什麼好解釋的,但是應用場景比較少,在實際的項目中我們並不是那麼簡單的數據結構,那麼簡單的排序規則,下麵我們來重點介紹一個非常牛逼而且非常靈活的一個排序方法。
「reverse」方法的相容性。
相容
sort
該方法對數組的元素進行排序,預設情況下按照升序排列。先看看兩個例子吧
//案例1
const numbers = [1, 3, 5, 2, 4];
numbers.sort();
console.log(numbers); //[1, 2, 3, 4, 5]
//案例2
const numbers2 = [1, 15, 20, 2, 3];
numbers2.sort();
console.log(numbers2);//[1, 15, 2, 20, 3]
你會發現排序規則並不是我們想想的那樣,究竟是怎麼一回事情呢?
其實在「sort」方法執行的時候,數組的每個元素會先執行一次 toString() 方法,然後在根據字元串的 Unicode 編碼進行排序。
那麼我們怎麼樣做才能按照我們自己的意願或者說規則進行排序呢?
其實「sort」方法還接受一個可選的參數:該參數是一個函數,它可以用來指定我們數組排序的規則。
//語法
array.sort([callback])
那麼我們應該如何利用這個參數去指定我們排序的規則呢?參數函數接受兩個參數,然後會根據返回的兩個參數的比較值進行排序。
array.sort(compare(a, b){
return a- b
});
排序的規則如下:
- 如果 a - b 小於 0 ,那麼 a 在 b 的前面,也就是會按照升序排列
- 如果 a - b 等於 0 ,那麼 a 和 b 的位置相對不變
- 如果 a - b 大於 0 ,那麼 b 在 a 的前面,也就是會按照降序排列。
例如我們想把上面的案例2中的數組按照數字的大小進行排列,我們只需要加入上面我們說的比較函數
const numbers2 = [1, 15, 20, 2, 3];
numbers2.sort(function(a ,b){
return a- b;
});
console.log(numbers2);//[1, 2, 3, 15, 20]
是不是 so easy!如果我們想要進行降序排列也很簡單,調換一個我們的計算方法就行。
const numbers2 = [1, 15, 20, 2, 3];
numbers2.sort(function(a ,b){
return b - a;
});
console.log(numbers2);//[20, 15, 3, 2, 1]
但是在實際的使用當中我們不僅僅比較的是數字與字元類型,也可以能是比較的是對象,不過沒關係我們依舊可以使用對象的屬性去進行排序。
const friends = [{
name: "大B哥",
age: 25
}, {
name: "二B哥",
age: 30
}, {
name: "三B哥",
age: 28
}, {
name: "我",
age: 14
}];
friends.sort(function(a, b){
return b.age - a.age;
});
console.log(friends);
//排序之後
//[{name: "二B哥", age: 30},
//{name: "三B哥", age: 28},
//{name: "大B哥", age: 25},
//{name: "我", age: 14}]
可以看到我交的朋友一般都比較偏大,一眼就能看出哪個是最大的,哪個是最小的,不過我相信大家也看出來了,最小的哪個就是我(… 哈哈)。
至於 sort 更多更有趣的方法,小伙伴們不妨自己去尋找嘗試吧。
繼續來看看「sort」方法的相容性。
相容
總結
我們繼續了我們數組系列的文章的,今天我們主要說的就是數組的如何轉換成其他數據類型,以及數組如何按照我們自己的規則去進行排序。希望對你有所幫助,我們後面還會持續更新其他用法,如果你喜歡本篇文章就給個贊加關註吧!