2013-08-06 26 views
0

我在我的代碼中使用了很多。我可以作爲一個班輪嗎?基於另一個陣列的功能建立陣列

function anotherFunction(array) 
{ 
    new_array = []; 
    for (var i = 0; i < array.length; i++) 
    { 
     new_array.push(someFunction(array[i])); 
    } 
    return new_array; 
} 
+0

是的,刪除換行符;)*只是在開玩笑*。 –

+0

array.push應該是new_array.push和返回數組應該是返回new_array,我認爲 –

回答

6

你想要的是「map」在陣列上的函數:

var arr = [...]; 
var arr2 = arr.map(someFunction); 
+0

注意'Array.prototype.map'是ES5和不兼容舊版瀏覽器會很好,雖然=) – C5H8NNaO4

+0

我認爲這可能不會在IE8中支持。我認爲它可以很容易地添加到數組原型上;我只需要回想一下這樣做是否會有某種警告。 – Katana314

+1

指向文檔的鏈接提供了向後兼容性填充,並且大量使用的ES5Shim兼容性庫包含IIRC。 – deceze

0

如果你還想快點... Array.prototype.map並不像循環那麼快。

http://jsperf.com/array-map-vs-loop/2

這樣:

function customMap(a,c){ 
var b=[],l=a.length; 
while(l--){ 
    b[l]=c(a[l]); 
} 
return b; 
} 

var newArray=customMap(oldArray,function); 

這是非常快回吧。

您還可以創建自定義原型。

Object.defineProperty(Array.prototype,'CMap',{value:function(c){ 
var b=[],l=this.length;while(l--){b[l]=c(this[l])} 
return b; 
},writable:false,enumerable:false}); 

並使用它像地圖。

var newArray=oldArray.CMap(function); 

編輯

這裏是jsperf測試...

http://jsperf.com/custom-vs-map

每個變量的測試之外定義...只能對自定義的速度是根據功能。

這適用於所有瀏覽器。

+0

變量名稱的長度不會影響性能,所以你不必縮小它:P但是,Array.prototype。地圖涉及比常識循環更復雜的語義,因此速度更慢。 – Esailija

+0

順便說一句,jsperf不能更具誤導性和不正確:( – Esailija

+0

無......我真的測試過......我剛剛得到了jsperf的第一個鏈接...推vs vs直接設置&&地圖vs自定義函數比較慢.. 。while也是while循環在現實世界中更快,你甚至不能在jsperf中測試while循環。 – cocco