我在我的代码中大量使用了以下内容。我可以做一个班轮吗?
function anotherFunction(array)
{
new_array = [];
for (var i = 0; i < array.length; i++)
{
new_array.push(someFunction(array[i]));
}
return new_array;
}
我在我的代码中大量使用了以下内容。我可以做一个班轮吗?
function anotherFunction(array)
{
new_array = [];
for (var i = 0; i < array.length; i++)
{
new_array.push(someFunction(array[i]));
}
return new_array;
}
你想要的是在一个函数上“映射”数组:
var arr = [...];
var arr2 = arr.map(someFunction);
var newArray = array.map(someFunction);
您应该注意,如果您需要支持,这可能会在 IE8 上失败
http://kangax.github.io/es5-compat-table/#Array.prototype.map
如果您还想要它快... 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
每个变量都在测试之外定义......所以速度仅基于自定义函数。
这适用于所有浏览器。