国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JS從非數組對象轉數組的方法小結

2019-11-19 14:06:24
字體:
來源:轉載
供稿:網友

前言

本文主要匯總了一些JS從非數組對象轉數組的方法,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

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() 方法,創建指定數量的字符串副本

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 咸宁市| 沂南县| 平泉县| 广东省| 武胜县| 吉林市| 青田县| 社旗县| 惠来县| 民县| 海城市| 徐水县| 娱乐| 大冶市| 白城市| 岢岚县| 金昌市| 平果县| 南康市| 库车县| 安顺市| 高唐县| 炎陵县| 永清县| 万安县| 夏津县| 新兴县| 寻乌县| 射洪县| 河曲县| 灌云县| 泗洪县| 抚松县| 铜陵市| 枞阳县| 禄丰县| 松溪县| 武邑县| 长汀县| 淅川县| 渭源县|