我有一个Javascript对象,如下所示:
var a = {
b: [1,2,3,4,5,6,7,8,9],
c: [10,11,12,13,14,15]
}
遍历两个数组(我想循环遍历每个值!)我使用$.each
,但我可以这样做:
// Option A:
$.each(a, function(i, d){
$.each(d, function(j, e){
console.log(e);
}
});
或者
// Option B:
$.each(a.b, function(k, f){
console.log(f)
})
$.each(a.c, function(l, g){
console.log(g)
})
两者都生成完全相同的输出,但这两个版本中哪一个更快/更高效/更好?
有什么不同吗?
或者是否有更快/更有效/更好的方式(没有$.each
)?
答案 0 :(得分:8)
最有效的方法是使用简单的原生for
循环。完全避免使用jQuery。
答案 1 :(得分:1)
没有什么可以击败:
var i=0, arr=a.b, len=arr.length;
for(; i<len; i++ ) { console.log(arr[i]) } ;
顺便说一下,如果你有疑问,请问jsperf
这里有一个测试显示5X / 10X增加:答案 2 :(得分:1)
使用某种each
总是慢于for循环是不正确的。 SM和V8可以做很好的内联
只要你没有为它们破坏它们 - 每个利用这个事实的自定义实现都可以运行just as fast
as a for loop。
话虽如此,jQuery $.each
没有利用这个事实而且速度很慢。避免在性能敏感的情况下使用。
至于你的问题,我希望第二个在JIT中稍快一些,因为它避免了反射并使用静态属性访问,这被每个现代引擎利用。 $ .each是如此之慢,以至于这里的差异并不明显。
答案 3 :(得分:0)
如果您真正担心的是速度,那么请转到javascript自己的for循环。 对于你的答案,我认为选项b会更快