iT邦幫忙

2021 iThome 鐵人賽

DAY 7
1
Modern Web

追求JS小姊姊30天系列 第 7

追求JS小姊姊系列 Day7 -- 鄭列展現的工具力(中)

前情提要

鄭列展現了自己的工具力(快速找雜物),但似乎還有別的?


鄭列:我看你是完全不懂啊,我還有別的能力啊,那就是:

  1. 快速調整亂堆雜物排序的方法
    a.Array.prototype.sort()
    b.Array.prototype.reverse()

  2. 快速增減雜物的方法
    a.Array.prototype.splice()


工具力再啟動之 -- 姊,東西想換位置也沒關係喔

Array.prototype.sort()

公式:sort(compareFn((firstEl,secondEl))
公式解釋:

  1. compareFn:用於比較陣列內值的函式
  2. firstEl:第一個比較值
  3. secondEl:第二個比較值

是否會回傳值

  1. 單純使用sort(),沒有加入compareFn時:
    會將陣列內容轉為字串,接著根據內建的unicode規則(用charCodeAt()判斷輸入值的unicode大小。),來判斷輸入大小後,接著進行排列。

  2. 加入compareFn進行比較時:
    根據MDN所寫的比較規則:

If compareFunction(a, b) returns a value > than 0, sort b before a.
If compareFunction(a, b) returns a value < than 0, sort a before b.
If compareFunction(a, b) returns 0, a and b are considered equal.

大略翻譯就是:
1. a>0時,數值b往前排;
2. a <0時,維持a在前b在後; 
3. a=0時,也維持a在前b在後

Q1: 想照著英文字母順序擺放名牌?沒問題

let x = ["BenQ","Apple","Guci","Parda","Hermes"];
console.log(x.sort())
//排序背後的道理是依據unicode的規則判斷

Array.prototype.reverse()

公式:find(callback((element,index))
公式解釋:

  1. callback:所有陣列內的元素都會被這個函式執行
  2. element:目標陣列內的元素
  3. index:元素的索引值位置(選擇性)

是否會回傳值

  1. 符合條件:會把索引值的內容調換

Q1:原本由年代遠到近的合照擺放,會感覺自己正在變老,想交換順序行嗎?
這樣要很久?給鄭列我1分鐘就夠處理

let jsWithFriendsPhotos = ["2016-大家的合照","2017-大家的合照","2018-大家的合照"];
console.log(jsWithFriendsPhotos.reverse())

工具力再啟動之 -- 姊,堆好多東西都要一次丟也沒關係

鄭列:哼哼,這個技能我特別得意,先來假想情境才能顯現它的厲害,假如今天JS一如往常堆滿了各種東西,如圖:

let jsCollections = ["JS姐妹的東西",
"JS姐妹的東西","JS姐妹的東西",
"JS的私人雜物","JS的私人雜物",
"JS的私人雜物","JS的私人雜物",
"JS的私人雜物","JS的私人雜物",
"JS姐妹的東西","工具人的朝貢",
"工具人的朝貢","工具人的朝貢",
"工具人的朝貢","工具人的朝貢",];

Q1:今天她說她覺得自己的雜物太多了,想丟掉一些
那還記得之前追求JS小姊姊系列 Day5 -- 工具人登場的部分,有提到的pop(),shift()嗎?只能先用起來了!


//首先我們知道JS的雜物範圍在索引值[4]-[9]之間
//1 用pop
jsCollections.pop();
jsCollections.pop();
jsCollections.pop();

//2 用shift
jsCollections.shift();
jsCollections.shift();
jsCollections.shift();
//3 用[]一個一個消
delet jsCollections[4];
delet jsCollections[5];
delet jsCollections[6];

為了愛,當然照樣整理下去,然後就會遇到各種問題:pop只會從尾端刪內容,shif則是從頭,根本處理不到中間的部分.....
這就是Array.prototype.splice()登場的時候了

Array.prototype.splice()

公式:splice(start, deleteCount, item1, item2, itemN)
公式解釋:

  1. start:開始執行的索引值位置
  2. deleteCount:輸入整數(代表欲刪除值的數量),若沒有輸入值或是輸入的值等於陣列長度,會刪除start值後所有的內容 (選擇性)
  3. item1..N:欲添加的值,數量不限,以,間格(選擇性)

是否會回傳值

  1. 有刪除內容:回傳被刪除內容的陣列
  2. 沒有刪除內容:回傳空陣列

Q1:解決雜物太多,卻想一次丟的問題

let jsCollections = ["JS姐妹的東西",
"JS姐妹的東西","JS姐妹的東西",
"JS的私人雜物","JS的私人雜物",
"JS的私人雜物","JS的私人雜物",
"JS的私人雜物","JS的私人雜物",
"JS姐妹的東西","工具人的朝貢",
"工具人的朝貢","工具人的朝貢",
"工具人的朝貢","工具人的朝貢",];

jsCollections.splice(4,3);
//就能輕鬆把自己的雜物清除啦!~

Q2:仰慕者一次給我好多東西喔~也沒問題!

let jsCollections = ["JS姐妹的東西",
"JS姐妹的東西","JS姐妹的東西",
"JS的私人雜物","JS的私人雜物",
"JS的私人雜物","JS的私人雜物",
"JS的私人雜物","JS的私人雜物",
"JS姐妹的東西","工具人的朝貢",
"工具人的朝貢","工具人的朝貢",
"工具人的朝貢","工具人的朝貢",];

//依照上面的公式,選擇你想放置的位置
jsCollections.splice(4,"仰慕者的朝貢1","仰慕者的朝貢2","仰慕者的朝貢3","仰慕者的朝貢4");
console.log(jsCollections);

鄭列:不過說來慚愧,其實這些能力都不太受JS的青睞...
:(看他突然很難過,該安慰他嗎?..),不然JS到底喜歡哪些能力啊。
鄭列:(恢復精神樣)哼,既然你真心誠意地發問了,我就大發慈悲的回應你吧。

-- to be continued --


那今天就到這邊摟!今天分享喜歡的歌是:
Queen - Keep Yourself Alive (Official Video)
https://www.youtube.com/watch?v=JofwEB9g1zg

每天的休息,是為了後面的追求,明天見。

參考資料:
  1. MDN
  2. 008

上一篇
追求JS小姊姊系列 Day6 -- 鄭列展現的工具力(上)
下一篇
追求JS小姊姊系列 Day8 -- 鄭列展現的工具力(下)
系列文
追求JS小姊姊30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
南國安迪
iT邦新手 3 級 ‧ 2021-09-22 13:38:19

keep yourself alive... (斷氣
/images/emoticon/emoticon17.gif

Chiahsuan iT邦新手 4 級 ‧ 2021-09-22 14:46:31 檢舉

作者別斷氣,小讀者期待看後續發展啊~~~

暖力來襲!
/images/emoticon/emoticon02.gif

1
Chiahsuan
iT邦新手 4 級 ‧ 2021-09-22 14:48:13

陣列作為工具人真的非常適合~~~~好有趣啊/images/emoticon/emoticon37.gif

0
wendy
iT邦新手 2 級 ‧ 2021-09-22 16:52:38

一日工具人,終生工具人

哈哈哈哈 (乾我屁事
/images/emoticon/emoticon07.gif

1
Chris
iT邦新手 4 級 ‧ 2021-09-25 22:35:31

竟然還有劇情!

再次捕獲野生的饅頭大/images/emoticon/emoticon07.gif

我就靠劇情包裝知識的不足

我要留言

立即登入留言