集合 轉換成 陣列
Array.from 用於陣列轉換
Array.from 亦可用來轉換 集合(Set & Map)
const arr = [1, 2, 2, 3] const newArr = Array.from(new Set(arr)) console.log(newArr) // [1, 2, 3]
字串 & 陣列轉換
陣列轉換成字串使用join(),若不傳值 會以 “,”分割
字串轉陣列使用 split() 和 Array.from()
// join() 陣列轉換成字串 const strArr = ['A', 'B', 'C'] let defaultStr = strArr.join() let spaceStr = strArr.join('') let str = strArr.join('、') console.log(defaultStr) // A,B,C console.log(spaceStr) // A B C console.log(str) // A、B、C // split() 字串轉陣列 const str = '1 2 3 4 5 6' // ["1", "2", "3", "4", "5", "6"] console.log(str.split(' ')) // Array.from() 字串轉陣列 cosnt str = 'foo' console.log(Array.from(str)) // ["f", "o", "o"]
字串轉陣列
split() 將字串轉成陣列
reverse() 反轉陣列
join() 將陣列合併字串
const str = 'Mom Get The Camera' const result = str.split('').reverse().join('') console.log(result)
NodeList、HTMLCollection (類陣列) 與 Array 差異
NodeList 是經由 document.querySelectorAll(),childNodes 產生
HTMLCollection 是經由 document.getElementsByTagName(),children 產生
這兩種皆為類陣列,無法使用陣列型別的method,但可使用索引存取內容
NodeList 為 Browser API,Array 則為 JS API
querySelectorAll(),getElementsByTagName 也為Browser API
NodeList 並非皆是 dynamic lists
意旨當有新的DOM被加入或舊的DOM被刪除時,不見得會自動更新
Ex:
querySelectorAll 會回傳 static list(不會自動更新)
.childNodes 則會自動更新
類陣列轉成陣列的方法
為了使其兩者皆可使用Array方法,要將其轉成陣列
方法1
可支援至 IE6
const arr = [1, 2, 2, 3] const newArr = Array.from(new Set(arr)) console.log(newArr) // [1, 2, 3]
方法2
不支援IE(Edge可)
可用 Polyfills 支援至IE9
var btns = document.querySelectorAll('button'); var btnsArr = Array.from(btns);
方法3
ES6 展開運算子 (不支援IE)
var btns = document.querySelectorAll('button'); var btnsArr = [...btns]
NodeList 與 HTMLCollection的差異
NodeList 並不限制儲存的節點型別(可儲存文字節點、屬性節點)
而 HTMLCollection只能放置 element 節點
const tpl = ` <div class="test"> <h6>A</h6> <h6>B</h6> <h6>C</h6> </div> ` const test = document.querySelector('.test') // NodeList(7) [text, h6, text, h6, text, h6, text] console.log(test.childNodes); // HTMLCollection(3) [h6, h6, h6] console.log(test.children);
參考引用資料:
JS 陣列轉換&小技巧:https://ithelp.ithome.com.tw/articles/10212010
將 Node List 轉換成陣列:https://www.jstips.co/zh_tw/javascript/converting-a-node-list-to-an-array/
DOM 集合型別 HTMLCollection、NodeList 差異說明:https://pvencs.blogspot.com/2014/02/dom-htmlcollectionnodelist.html