0

我正在尝试优化一些淘汰赛 js 代码,我想知道哪个会更快,即使用索引器访问变量,如下所示:

        for (var i = 0; i < data.length; i++) {     

            data[i].MediaID = ko.observable(data[i].MediaID);
            data[i].MediaName= ko.observable(data[i].MediaName);
            data[i].MediaTypeID= ko.observable(data[i].MediaTypeID);

        }

或声明一个临时变量。

        for (var i = 0; i < data.length; i++) {             
            var temp = data[i];

            temp.MediaID = ko.observable(temp.MediaID);
            temp.MediaName= ko.observable(temp.MediaName);
            temp.MediaTypeID= ko.observable(temp.MediaTypeID);

        }           
4

4 回答 4

3

使用临时变量访问应该稍微快一些,因为您不需要在数组中查找元素。

然而,收益将是微乎其微的

于 2013-04-20T16:00:09.690 回答
0

相比

        data.a.b.c.d.e.f.g.MediaID = ko.observable(data.a.b.c.d.e.f.g.MediaID);
        data.a.b.c.d.e.f.g.MediaName= ko.observable(data.a.b.c.d.e.f.g.MediaName);
        data.a.b.c.d.e.f.g.MediaTypeID= ko.observable(data.a.b.c.d.e.f.g.MediaTypeID);

        var temp =data.a.b.c.d.e.f.g;

        temp.MediaID = ko.observable(temp.MediaID);
        temp.MediaName= ko.observable(temp.MediaName);
        temp.MediaTypeID= ko.observable(temp.MediaTypeID);

你不需要多次查找相同的东西

于 2013-04-20T16:06:57.370 回答
0

如果你想要更快,你还应该缓存 data.length

for(var i = 0, len = data.length; i < len; i++)...
于 2013-04-20T16:07:25.600 回答
0

如果您担心性能,请不要在循环中使用 array.length。这不是一个值,是一个内部函数,每次访问都会重新计算数组的总项目,更好的是:

var total = items.length;
for(i=0; i < total; i++){
   //stuff
}

现在对于您的特定用例,我不知道您正在使用的框架,但是如果您使用的是 jQuery 和/或下划线,而不是循环,您可以使用其中一个映射函数: http://api. jquery.com/jQuery.map/ http://underscorejs.org/#map

于 2013-04-20T16:08:02.443 回答