1. 程式人生 > >將類陣列物件轉化成陣列物件的幾種方法

將類陣列物件轉化成陣列物件的幾種方法


今天遇到一個問題,發現在操作類陣列物件時特別不方便,於是就想到能否將類陣列物件轉化成陣列物件,然後再利用陣列物件強大又便捷的方法來操作呢?然後...然後在尋找解決方法的時候我就被自己蠢哭了...事情是這樣發展的:


一、Array.prototype.slice.call(arrayLike)


這是我在網上搜的,原文請戳這兒[http://www.jianshu.com/p/f8466e83cef0](http://www.jianshu.com/p/f8466e83cef0),原理是陣列的slice()方法可以從已有陣列中返回一個新陣列,它可以接受兩個引數arr.slice(start,end),第一個引數規定從何處開始選取,第二個引數表示從何處選取結束,如果不傳參將返回原陣列的一個副本,但該方法不會修改原陣列,而是返回擷取的新陣列,根據這個就可以將類陣列轉化成陣列物件啦!然後樓主又說了,既然slice方法可以那splice方法可不可以呢,當然可以,但是蠢哭的我竟對此產生了質疑!!


求樓主的心理陰影面積...但是在質疑過程中自己學會分析問題並動手測試尋找證明和解決方法,我認為偶爾蠢一下還是值得的。

二、Array.prototype.splice.call(arrayLike,0)


這種方式的原理和slice(start,end)方法差不多,都是通過返回一個新的陣列來將類陣列物件轉化成陣列,區別在於(我談區別只是希望下次不要又頭腦混亂splice/slice傻傻記不清):

1.splice(start,count,item)方法傳入的引數不同,第一個引數代表開始選取的元素位置,第二個說明選取的元素數量(不傳說明從第一個引數位置開始到陣列的最後一個元素),第三個引數代表需要新增的元素(將會新增到第一個引數位置上)。

2.splice()方法刪除/代替/新增元素之後將會影響到原來的陣列,而splice()則不會影響。


三、迴圈遍歷類陣列物件,push到新建立的陣列物件裡


這是自己想出來的方法。具體:
``` javascript
var length = arrayLike.length;
var arr = [];
for (var i = 0; i < length; i++) {
    arr.push(arrayLike[i]);
    return arr;
}
```