轉!從非陣列物件轉陣列方法小結

2021-10-01 23:12:50 字數 1973 閱讀 7497

該方法可以將類陣列物件轉換為陣列,所謂類陣列物件,就是含 length 和索引屬性的物件

返回的陣列長度取決於物件 length 屬性的值,且非索引屬性的值,或索引大於 length 的值都不會被返回到陣列中

實錘如下

let obj = 

let arr = array.prototype.slice.call(obj)

// [3, 13, 23]

簡潔寫法.slice.call(obj)

該方法可以將類陣列物件和可迭代物件轉換為陣列

類陣列物件上文已提及,何為可迭代物件?

通過生成器建立可迭代物件

let obj = 

function *createiterator(obj)

}let iterator = createiterator(obj)

let arr = array.from(iterator)

// [3, 13, 23, 33]

改造物件本身,使其成為可迭代物件

預設情況下,開發者定義的物件都是不可迭代物件,但如果給 symbol.iterator 屬性新增乙個生成器,則可以將其變為可迭代物件

let obj = 

obj[symbol.iterator] = function* ()

}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']返回["o", "b", "j"]

字串去重

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

預設情況下,開發者定義的物件都是不可迭代物件,但提供了返回迭代器的方法

通過使用這些方法,可以返回相關的陣列

與類陣列物件需要物件有 length 值不同,object.values(obj) 返回物件自身可列舉屬性值的集合

let obj = 

let arr = object.values(obj) // [3, 13, 23, 33]

在很大程度上,可以將字串看成字串陣列,

都有 length 屬性

都有 concat() / indexof() / includes() / slice() 方法

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

string 還有個 repeat() 方法,建立指定數量的字串副本

陣列方法小結

1 陣列建立 var arr new array var arr new array size 建立並指定長度,但是長度是可以隨之發生改變的 2 陣列的頭部新增刪除 unshift 方法可向陣列的開頭新增乙個或更多元素,並返回新陣列的長度。shift 方法用於把陣列的第乙個元素從其中刪除,並返回第乙...

js陣列方法小結

var arr new array 2 新建陣列 arr.push shiftname 向陣列的末尾新增乙個或更多元素 arr.join value 把陣列用value分割,value可以是逗號或者空格,並轉化成字串 concat 連線兩個或更多的陣列,並返回結果。join 把陣列的所有元素放入乙個...

js類陣列轉陣列方法(偏小白)

類陣列 類似於乙個陣列的物件 是相當於乙個物件,裡面有陣列的值以及相應的屬性 length 類陣列本質上是乙個物件,使用物件模擬出來的乙個陣列,它用陣列下標作為物件屬性的鍵,陣列元素作為物件各字段的值。另外,類陣列物件還有乙個length屬性。除此之外不再有其它像push pop等陣列屬性和方法。v...