JS從非數(shù)組對象轉數(shù)組的方法小結
前言
本文主要匯總了一些JS從非數(shù)組對象轉數(shù)組的方法,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。
Array.prototype.slice.call(obj)
該方法可以將類數(shù)組對象轉換為數(shù)組,所謂類數(shù)組對象,就是含 length 和索引屬性的對象
返回的數(shù)組長度取決于對象 length 屬性的值,且非索引屬性的值,或索引大于 length 的值都不會被返回到數(shù)組中
實錘如下
let obj = {
'0': 3,
'1': 13,
'2': 23,
'3': 33,
'length': 3,
'name': 330
}
let arr = Array.prototype.slice.call(obj)
// [3, 13, 23]
簡潔寫法 [].slice.call(obj)
Array.from(obj)
該方法可以將類數(shù)組對象和可迭代對象轉換為數(shù)組
類數(shù)組對象上文已提及,何為可迭代對象?
- Array、Set、Map 和字符串都是可迭代對象(WeakMap/WeakSet 并不是可迭代對象)
- 字符串變成了可迭代對象,解決了編碼的問題
- 這些對象都有默認的迭代器,即具有 Symbol.iterator 屬性
- 可以用 for of 循環(huán)
- 所有通過生成器創(chuàng)建的迭代器都是可迭代對象
document.getElementsByTagName("div")返回的是可迭代對象但不是一個數(shù)組
Array.isArray(document.getElementsByTagName('div'))返回 false
通過生成器創(chuàng)建可迭代對象
let obj = {
'0': 3,
'1': 13,
'2': 23,
'3': 33
}
function *createIterator(obj){
for(let value in obj){
yield obj[value]
}
}
let iterator = createIterator(obj)
let arr = Array.from(iterator)
// [3, 13, 23, 33]
改造對象本身,使其成為可迭代對象
默認情況下,開發(fā)者定義的對象都是不可迭代對象,但如果給 Symbol.iterator 屬性添加一個生成器,則可以將其變?yōu)榭傻鷮ο?/p>
let obj = {
'0': 3,
'1': 13,
'2': 23,
'3': 33
}
obj[Symbol.iterator] = function* () {
for(let value in this){
yield this[value]
}
}
let arr = Array.from(obj)
// [3, 13, 23, 33]
判斷對象是否為可迭代對象的方法
typeof obj[Symbol.iterator] === 'function'
一點延伸 for of 與 forEach 與 for in
for of 用于循環(huán)可迭代對象,包括有 Array, Set, Map, 字符串
而 Array, Set, Map 都有 forEach 方法
另外,NodeList 不是 Array, Set, Map,但是一個可迭代對象,可以用 for of 遍歷
此外,用 for of 循環(huán)對象時可以通過 break 提前終止,而 forEach 無法提前跳出循環(huán)
for in 遍歷對象的可枚舉屬性,包括其原型鏈上的屬性,且不保證順序
若要遍歷對象自身的可枚舉屬性,使用 hasOwnProperty() 方法來確定屬性是否時對象自身屬性
Object.getOwnPropertyNames(obj) , 返回對象自身可枚舉或不可枚舉屬性
反正已經(jīng)扯遠了,那就再扯遠一點, Object.assign() 方法將所有可枚舉屬性的值從一個或多個源對象復制到目標對象
[…obj]
展開運算符可以將可迭代對象轉換為數(shù)組
例如, [...'obj'] 返回 ["o", "b", "j"]
字符串去重
[...new Set('objobj')]
Object.values(obj)
默認情況下,開發(fā)者定義的對象都是不可迭代對象,但提供了返回迭代器的方法
- entries()
- values()
- keys()
通過使用這些方法,可以返回相關的數(shù)組
與類數(shù)組對象需要對象有 length 值不同,Object.values(obj) 返回對象自身可枚舉屬性值的集合
let obj = {
'0': 3,
'1': 13,
'2': 23,
'3': 33
}
let arr = Object.values(obj) // [3, 13, 23, 33]
字符串與數(shù)組的關系
在很大程度上,可以將字符串看成字符串數(shù)組,
都有 length 屬性
都有 concat() / indexOf() / includes() / slice() 方法
不過值得注意的是, string 上沒有方法可以原地修改它自身的內(nèi)容,都是返回新的 string
string 還有個 repeat() 方法,創(chuàng)建指定數(shù)量的字符串副本
總結
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
使用JavaScript將圖片合并為PDF的實現(xiàn)
在日常工作中,我們可能需要拍攝一些照片并將圖像合并到PDF文件中,這可以通過許多應用來完成,Dynamsoft Document Viewer讓這一操作更加方便,在本文中,我們將使用Dynamsoft Document Viewer創(chuàng)建一個Web應用,用JavaScript將圖像合并到PDF中,需要的朋友可以參考下2024-07-07
JavaScript使用正則表達式獲取全部分組內(nèi)容的方法示例
這篇文章主要介紹了JavaScript使用正則表達式獲取全部分組內(nèi)容的方法,結合實例形式分析了javascript正則匹配的相關操作技巧,需要的朋友可以參考下2017-01-01

