標籤:

類數組轉換為數組的方法

類數組轉換為數組的方法

1、Array.prototype.slice.call()

這種方法是借用了數組原型中的slice方法,返回一個數組。slice方法的內部實現:

Array.prototype.slice = function(start,end){ var result = new Array(); start = start || 0; end = end || this.length; //使用call之後this指向了類數組對象 for(var i = start; i < end; i++){ result.push(this[i]); } return result; }

一個通用的轉換函數:

var toArray = function(s){ try{ return Array.prototype.slice.call(s); } catch(e){ var arr = []; for(var i = 0,len = s.length; i < len; i++){ arr[i] = s[i]; } return arr; }

2、Array.from()

Array.from()是ES6中新增的方法,可以將兩類對象轉為真正的數組:類數組對象和可遍歷(iterable)對象(包括ES6新增的數據結構Set和Map)。

var arrayLike = { 0:a, 1:b, 2:c, length:3};var arr = Array.from(arrayLike);//[a,b,c]//把NodeList對象轉換為數組,然後使用數組的forEach方法var ps = document.querySelectorAll(p);Array.from(ps).forEach(p){ console.log(p);}); //轉換arguments對象為數組function foo(){ var args = Array.from(arguments); //...}//只要是部署了Iterator介面的數據結構,Array.from都能將其轉換為數組Array.from(hello); //[h,e,l,l,o]

3、擴展運算符(…)

同樣是ES6中新增的內容,擴展運算符(…)也可以將某些數據結構轉為數組

//arguments對象的轉換function foo(){ var args = [...arguments];}//NodeList對象的轉換[...document.querySelectorAll(p)]

擴展運算符實際上調用的是遍歷器介面,如果一個對象沒有部署此介面就無法完成轉換


推薦閱讀:

為什麼沒有中國公司有意收購 ARM,而是軟銀收購了 ARM?
蓋茨、馬雲、劉強東,科技大佬的辦公室什麼樣?
linux字體顯示為什麼還做不到像android一樣清晰?
華為的「靈犀一指」貼膜是什麼原理?
如何看待《變形記》梁小友越來越網紅?

TAG:科技 | 數學 |