JS從非數(shù)組對(duì)象轉(zhuǎn)數(shù)組的方法小結(jié)
前言
本文主要匯總了一些JS從非數(shù)組對(duì)象轉(zhuǎn)數(shù)組的方法,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。
Array.prototype.slice.call(obj)
該方法可以將類數(shù)組對(duì)象轉(zhuǎn)換為數(shù)組,所謂類數(shù)組對(duì)象,就是含 length 和索引屬性的對(duì)象
返回的數(shù)組長(zhǎng)度取決于對(duì)象 length 屬性的值,且非索引屬性的值,或索引大于 length 的值都不會(huì)被返回到數(shù)組中
實(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]
簡(jiǎn)潔寫(xiě)法 [].slice.call(obj)
Array.from(obj)
該方法可以將類數(shù)組對(duì)象和可迭代對(duì)象轉(zhuǎn)換為數(shù)組
類數(shù)組對(duì)象上文已提及,何為可迭代對(duì)象?
- Array、Set、Map 和字符串都是可迭代對(duì)象(WeakMap/WeakSet 并不是可迭代對(duì)象)
- 字符串變成了可迭代對(duì)象,解決了編碼的問(wèn)題
- 這些對(duì)象都有默認(rèn)的迭代器,即具有 Symbol.iterator 屬性
- 可以用 for of 循環(huán)
- 所有通過(guò)生成器創(chuàng)建的迭代器都是可迭代對(duì)象
document.getElementsByTagName("div")
返回的是可迭代對(duì)象但不是一個(gè)數(shù)組
Array.isArray(document.getElementsByTagName('div'))
返回 false
通過(guò)生成器創(chuàng)建可迭代對(duì)象
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]
改造對(duì)象本身,使其成為可迭代對(duì)象
默認(rèn)情況下,開(kāi)發(fā)者定義的對(duì)象都是不可迭代對(duì)象,但如果給 Symbol.iterator
屬性添加一個(gè)生成器,則可以將其變?yōu)榭傻鷮?duì)象
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]
判斷對(duì)象是否為可迭代對(duì)象的方法
typeof obj[Symbol.iterator] === 'function'
一點(diǎn)延伸 for of 與 forEach 與 for in
for of 用于循環(huán)可迭代對(duì)象,包括有 Array, Set, Map, 字符串
而 Array, Set, Map 都有 forEach 方法
另外,NodeList 不是 Array, Set, Map,但是一個(gè)可迭代對(duì)象,可以用 for of 遍歷
此外,用 for of 循環(huán)對(duì)象時(shí)可以通過(guò) break 提前終止,而 forEach 無(wú)法提前跳出循環(huán)
for in 遍歷對(duì)象的可枚舉屬性,包括其原型鏈上的屬性,且不保證順序
若要遍歷對(duì)象自身的可枚舉屬性,使用 hasOwnProperty()
方法來(lái)確定屬性是否時(shí)對(duì)象自身屬性
Object.getOwnPropertyNames(obj)
, 返回對(duì)象自身可枚舉或不可枚舉屬性
反正已經(jīng)扯遠(yuǎn)了,那就再扯遠(yuǎn)一點(diǎn), Object.assign()
方法將所有可枚舉屬性的值從一個(gè)或多個(gè)源對(duì)象復(fù)制到目標(biāo)對(duì)象
[…obj]
展開(kāi)運(yùn)算符可以將可迭代對(duì)象轉(zhuǎn)換為數(shù)組
例如, [...'obj']
返回 ["o", "b", "j"]
字符串去重
[...new Set('objobj')]
Object.values(obj)
默認(rèn)情況下,開(kāi)發(fā)者定義的對(duì)象都是不可迭代對(duì)象,但提供了返回迭代器的方法
- entries()
- values()
- keys()
通過(guò)使用這些方法,可以返回相關(guān)的數(shù)組
與類數(shù)組對(duì)象需要對(duì)象有 length 值不同,Object.values(obj)
返回對(duì)象自身可枚舉屬性值的集合
let obj = { '0': 3, '1': 13, '2': 23, '3': 33 } let arr = Object.values(obj) // [3, 13, 23, 33]
字符串與數(shù)組的關(guān)系
在很大程度上,可以將字符串看成字符串?dāng)?shù)組,
都有 length 屬性
都有 concat()
/ indexOf()
/ includes()
/ slice()
方法
不過(guò)值得注意的是, string 上沒(méi)有方法可以原地修改它自身的內(nèi)容,都是返回新的 string
string 還有個(gè) repeat()
方法,創(chuàng)建指定數(shù)量的字符串副本
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- JS判斷兩個(gè)數(shù)組或?qū)ο笫欠裣嗤姆椒ㄊ纠?/a>
- js中數(shù)組對(duì)象去重的兩種方法
- js刪除對(duì)象/數(shù)組中null、undefined、空對(duì)象及空數(shù)組方法示例
- JS中數(shù)組與對(duì)象的遍歷方法實(shí)例小結(jié)
- JavaScript類數(shù)組對(duì)象轉(zhuǎn)換為數(shù)組對(duì)象的方法實(shí)例分析
- angular json對(duì)象push到數(shù)組中的方法
- JS實(shí)現(xiàn)數(shù)組簡(jiǎn)單去重及數(shù)組根據(jù)對(duì)象中的元素去重操作示例
- js實(shí)現(xiàn)以最簡(jiǎn)單的方式將數(shù)組元素添加到對(duì)象中的方法
- js實(shí)現(xiàn)數(shù)組和對(duì)象的深淺拷貝
- 使用Java進(jìn)行Json數(shù)據(jù)的解析(對(duì)象數(shù)組的相互嵌套)
- JavaScript判斷對(duì)象和數(shù)組的兩種方法
相關(guān)文章
微信小程序image圖片加載完成監(jiān)聽(tīng)
這篇文章主要為大家詳細(xì)介紹了微信小程序image圖片加載完成監(jiān)聽(tīng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08JavaScript實(shí)現(xiàn)帶音效的煙花特效
這篇文章主要為大家介紹了通過(guò)JavaScript實(shí)現(xiàn)的帶音效的煙花特效,文中的示例代碼簡(jiǎn)潔易懂,對(duì)我們學(xué)習(xí)JavaScript有一定的幫助,感興趣的可以了解一下2021-12-12javascript中的void運(yùn)算符語(yǔ)法及使用介紹
void是javascript中的一個(gè)操作符,void會(huì)計(jì)算表達(dá)式的值,但是會(huì)丟棄表達(dá)式的返回值接下來(lái)將詳細(xì)介紹下,感興趣的你可以參考下或許對(duì)你有所幫助2013-03-03javascript中數(shù)組(Array)對(duì)象和字符串(String)對(duì)象的常用方法總結(jié)
這篇文章主要介紹了javascript中數(shù)組(Array)對(duì)象和字符串(String)對(duì)象的常用方法,結(jié)合實(shí)例形式總結(jié)分析了javascript中關(guān)于數(shù)組和字符串的常用函數(shù)與使用技巧,需要的朋友可以參考下2016-12-12jszip插件實(shí)現(xiàn)圖片打包下載的方法分析
這篇文章主要介紹了jszip插件實(shí)現(xiàn)圖片打包下載的方法,結(jié)合實(shí)例形式分析了JavaScript使用jszip插件依據(jù)圖片列表打包下載zip壓縮文件的相關(guān)操作技巧,需要的朋友可以參考下2023-05-05JavaScript中字符串分割函數(shù)split用法實(shí)例
這篇文章主要介紹了JavaScript中字符串分割函數(shù)split用法,實(shí)例分析了javascript中split函數(shù)操作字符串的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04JavaScript實(shí)現(xiàn)旋轉(zhuǎn)圖像的三種方法介紹
在文檔掃描Web應(yīng)用中,我們需要旋轉(zhuǎn)傾斜的或掃描方向錯(cuò)誤的文檔圖像,這篇文章主要為大家整理了使用JavaScript旋轉(zhuǎn)圖像的三種方法,希望對(duì)大家有所幫助2024-01-01