您好,登錄后才能下訂單哦!
本文章向大家介紹使用JavaScript怎么將非數組對象轉換成數組的基本知識點總結和需要注意事項,具有一定的參考價值,需要的朋友可以參考一下。
Java主要應用于:1. web開發;2. Android開發;3. 客戶端開發;4. 網頁開發;5. 企業級應用開發;6. Java大數據開發;7.游戲開發等。
Array.prototype.slice.call(obj)
該方法可以將類數組對象轉換為數組,所謂類數組對象,就是含 length 和索引屬性的對象
返回的數組長度取決于對象 length 屬性的值,且非索引屬性的值,或索引大于 length 的值都不會被返回到數組中
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)
該方法可以將類數組對象和可迭代對象轉換為數組
類數組對象上文已提及,何為可迭代對象?
Array、Set、Map 和字符串都是可迭代對象(WeakMap/WeakSet 并不是可迭代對象)
字符串變成了可迭代對象,解決了編碼的問題
這些對象都有默認的迭代器,即具有 Symbol.iterator 屬性
可以用 for of 循環
所有通過生成器創建的迭代器都是可迭代對象
document.getElementsByTagName("div")
返回的是可迭代對象但不是一個數組
Array.isArray(document.getElementsByTagName('div'))
返回 false
通過生成器創建可迭代對象
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]
改造對象本身,使其成為可迭代對象
默認情況下,開發者定義的對象都是不可迭代對象,但如果給 Symbol.iterator
屬性添加一個生成器,則可以將其變為可迭代對象
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 用于循環可迭代對象,包括有 Array, Set, Map, 字符串
而 Array, Set, Map 都有 forEach 方法
另外,NodeList 不是 Array, Set, Map,但是一個可迭代對象,可以用 for of 遍歷
此外,用 for of 循環對象時可以通過 break 提前終止,而 forEach 無法提前跳出循環
for in 遍歷對象的可枚舉屬性,包括其原型鏈上的屬性,且不保證順序
若要遍歷對象自身的可枚舉屬性,使用 hasOwnProperty()
方法來確定屬性是否時對象自身屬性
Object.getOwnPropertyNames(obj)
, 返回對象自身可枚舉或不可枚舉屬性
反正已經扯遠了,那就再扯遠一點, Object.assign()
方法將所有可枚舉屬性的值從一個或多個源對象復制到目標對象
[…obj]
展開運算符可以將可迭代對象轉換為數組
例如, [...'obj']
返回 ["o", "b", "j"]
字符串去重
[...new Set('objobj')]
Object.values(obj)
默認情況下,開發者定義的對象都是不可迭代對象,但提供了返回迭代器的方法
entries()
values()
keys()
通過使用這些方法,可以返回相關的數組
與類數組對象需要對象有 length 值不同,Object.values(obj)
返回對象自身可枚舉屬性值的集合
let obj = { '0': 3, '1': 13, '2': 23, '3': 33 } let arr = Object.values(obj) // [3, 13, 23, 33]
字符串與數組的關系
在很大程度上,可以將字符串看成字符串數組,
都有 length 屬性
都有 concat()
/ indexOf()
/ includes()
/ slice()
方法
不過值得注意的是, string 上沒有方法可以原地修改它自身的內容,都是返回新的 string
string 還有個 repeat()
方法,創建指定數量的字符串副本
以上就是小編為大家帶來的使用JavaScript怎么將非數組對象轉換成數組的全部內容了,希望大家多多支持億速云!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。