Javascript angularjs中的非常慢的循环

Javascript angularjs中的非常慢的循环,javascript,angularjs,loops,for-loop,Javascript,Angularjs,Loops,For Loop,我使用此循环创建地图标记(1000点): var标记={}; 对于(变量i=0;i

我使用此循环创建地图标记(1000点):

var标记={};
对于(变量i=0;i

如何在angularjs中提高for循环速度(目前需要10秒)?

有一些方法可以提高代码速度,比如避免
eval
以及缓存循环变量和数组。通过缓存一些值,减少了一系列操作,如成员访问和不必要的计算

var items={data:{data:[]};
var icons={infost:'infost'};
对于(变量i=0;i<1000;i++){
items.data.data.push({lat:''+i,lng:''+i,name:''+i});
}
控制台。时间(“时间”);
///您的代码从这里开始
变量
data=items.data.data,
l=数据长度,
markers=Array(l),//或just[]
项目、latVal、lngVal、ikona、消息;
对于(变量i=0;i
  • 删除
    eval
    。它的速度很慢,并且会删除整个功能链的所有浏览器优化
  • 使用数组
    标记=[]
    而不是对象
  • 使用
    +
    将字符串转换为数字
  • 使用
    push
    将元素附加到数组中
  • items.data.data
    保存到变量中

  • 不要使用
    eval()
    @devqon是正确的,eval非常缓慢且不安全。假设lat和lng是数字,您可以使用
    Number(latVal)
    Number(lngVal)
    ;对于(var i=0;i++
    Number
    @Qwertiy快是的,你是对的,在1000次迭代之后,它开始产生一些不同。
    var markers = {};
    for (var i = 0; i < items.data.data.length; i++) {
        latVal = items.data.data[i].lat;
        lngVal = items.data.data[i].lng;
        ikona = icons.infost;
        message = "<b>" + items.data.data[i].name + "</b>";
        markers[i] = {'group': 'cmp', 'lat' : eval(latVal), 'lng' : eval(lngVal), 'icon' : ikona, 'message' : message};
    }
    $scope.Markers = markers;