2013-08-06 24 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