欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS從非數(shù)組對(duì)象轉(zhuǎn)數(shù)組的方法小結(jié)

 更新時(shí)間:2018年03月26日 10:46:04   作者:nbb3210  
這篇文章主要給大家介紹了關(guān)于JS從非數(shù)組對(duì)象轉(zhuǎn)數(shù)組的一些方法,分別是Array.prototype.slice.call(obj)、Array.from(obj)、[…obj]和Object.values(obj)等方法的詳細(xì)實(shí)現(xiàn)方法,需要的朋友可以參考下。

前言

本文主要匯總了一些JS從非數(shù)組對(duì)象轉(zhuǎn)數(shù)組的方法,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(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)潔寫法 [].slice.call(obj)

Array.from(obj)

該方法可以將類數(shù)組對(duì)象和可迭代對(duì)象轉(zhuǎn)換為數(shù)組

類數(shù)組對(duì)象上文已提及,何為可迭代對(duì)象?

  • Array、Set、Map 和字符串都是可迭代對(duì)象(WeakMap/WeakSet 并不是可迭代對(duì)象)
  • 字符串變成了可迭代對(duì)象,解決了編碼的問題
  • 這些對(duì)象都有默認(rèn)的迭代器,即具有 Symbol.iterator 屬性
  • 可以用 for of 循環(huán)
  • 所有通過生成器創(chuàng)建的迭代器都是可迭代對(duì)象
  • document.getElementsByTagName("div") 返回的是可迭代對(duì)象但不是一個(gè)數(shù)組
    Array.isArray(document.getElementsByTagName('div')) 返回 false

通過生成器創(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)情況下,開發(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í)可以通過 break 提前終止,而 forEach 無法提前跳出循環(huán)

for in 遍歷對(duì)象的可枚舉屬性,包括其原型鏈上的屬性,且不保證順序

若要遍歷對(duì)象自身的可枚舉屬性,使用 hasOwnProperty() 方法來確定屬性是否時(shí)對(duì)象自身屬性

Object.getOwnPropertyNames(obj) , 返回對(duì)象自身可枚舉或不可枚舉屬性

反正已經(jīng)扯遠(yuǎn)了,那就再扯遠(yuǎn)一點(diǎn), Object.assign() 方法將所有可枚舉屬性的值從一個(gè)或多個(gè)源對(duì)象復(fù)制到目標(biāo)對(duì)象

[…obj]

展開運(yùn)算符可以將可迭代對(duì)象轉(zhuǎn)換為數(shù)組

例如, [...'obj'] 返回 ["o", "b", "j"]

字符串去重

[...new Set('objobj')]

Object.values(obj)

默認(rèn)情況下,開發(fā)者定義的對(duì)象都是不可迭代對(duì)象,但提供了返回迭代器的方法

  • entries()
  • values()
  • keys()

通過使用這些方法,可以返回相關(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() 方法

不過值得注意的是, string 上沒有方法可以原地修改它自身的內(nèi)容,都是返回新的 string

string 還有個(gè) repeat() 方法,創(chuàng)建指定數(shù)量的字符串副本

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 使用JavaScript將圖片合并為PDF的實(shí)現(xiàn)

    使用JavaScript將圖片合并為PDF的實(shí)現(xiàn)

    在日常工作中,我們可能需要拍攝一些照片并將圖像合并到PDF文件中,這可以通過許多應(yīng)用來完成,Dynamsoft Document Viewer讓這一操作更加方便,在本文中,我們將使用Dynamsoft Document Viewer創(chuàng)建一個(gè)Web應(yīng)用,用JavaScript將圖像合并到PDF中,需要的朋友可以參考下
    2024-07-07
  • 詳解JavaScript如何有效取消HTTP請(qǐng)求

    詳解JavaScript如何有效取消HTTP請(qǐng)求

    在Web開發(fā)中,取消HTTP請(qǐng)求是一項(xiàng)關(guān)鍵任務(wù),所以本文為大家介紹了如何使用XMLHttpRequest、Fetch和Axios這三種常用的HTTP請(qǐng)求方式來實(shí)現(xiàn)取消請(qǐng)求的功能,需要的可以參考下
    2023-09-09
  • js方法數(shù)據(jù)驗(yàn)證的簡(jiǎn)單實(shí)例

    js方法數(shù)據(jù)驗(yàn)證的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)硪黄猨s方法數(shù)據(jù)驗(yàn)證的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09
  • 利用Ext Js生成動(dòng)態(tài)樹實(shí)例代碼

    利用Ext Js生成動(dòng)態(tài)樹實(shí)例代碼

    今天在公司幫同事寫了個(gè)用Ext Js生成動(dòng)態(tài)樹的Demo,在這里分享一下,也好供以后自己查閱。
    2008-09-09
  • js實(shí)現(xiàn)拖拽效果

    js實(shí)現(xiàn)拖拽效果

    本文主要是為了讓大家更好的理解js的面向?qū)ο?,通過實(shí)現(xiàn)拖拽效果向大家展示js面向?qū)ο螅浅2诲e(cuò),這里推薦給大家。
    2015-02-02
  • js實(shí)現(xiàn)移動(dòng)端圖片滑塊驗(yàn)證功能

    js實(shí)現(xiàn)移動(dòng)端圖片滑塊驗(yàn)證功能

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)移動(dòng)端圖片滑塊驗(yàn)證功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 鴻蒙系統(tǒng)中的 JS 開發(fā)框架

    鴻蒙系統(tǒng)中的 JS 開發(fā)框架

    最近華為鴻蒙OS 2.0正式開源!關(guān)于鴻蒙的教程其實(shí)網(wǎng)上也已經(jīng)有一些嘗鮮的小伙伴分享了相關(guān)文章,這篇文章主要為大家詳細(xì)介紹了鴻蒙系統(tǒng)中的 JS 開發(fā)框架,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 微信小程序自定義波浪組件使用方法詳解

    微信小程序自定義波浪組件使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了微信小程序自定義波浪組件的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 學(xué)習(xí)JavaScript正則表達(dá)式

    學(xué)習(xí)JavaScript正則表達(dá)式

    這篇文章主要介紹了JavaScript正則表達(dá)式,詳細(xì)深入的了解JavaScript正則表達(dá)式,從而更熟練掌握J(rèn)avaScript正則表達(dá)式,感興趣的小伙伴們可以參考一下
    2015-11-11
  • JavaScript使用正則表達(dá)式獲取全部分組內(nèi)容的方法示例

    JavaScript使用正則表達(dá)式獲取全部分組內(nèi)容的方法示例

    這篇文章主要介紹了JavaScript使用正則表達(dá)式獲取全部分組內(nèi)容的方法,結(jié)合實(shí)例形式分析了javascript正則匹配的相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01

最新評(píng)論