0

我在我的代码中大量使用了以下内容。我可以做一个班轮吗?

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

3 回答 3

6

你想要的是在一个函数上“映射”数组:

var arr  = [...];
var arr2 = arr.map(someFunction);
于 2013-08-06T14:03:31.480 回答
1
var newArray = array.map(someFunction);

您应该注意,如果您需要支持,这可能会在 IE8 上失败

http://kangax.github.io/es5-compat-table/#Array.prototype.map

于 2013-08-06T14:04:03.760 回答
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

每个变量都在测试之外定义......所以速度仅基于自定义函数。

这适用于所有浏览器。

于 2013-08-06T14:15:54.503 回答