2012-06-12 56 views
1

有没有办法迭代对象中的属性,而不使用for in循环?如何通过索引引用对象属性?

根据Nicholas C. Zakas的说法,for循环遍历一个对象的时间比for循环长8倍,但我无法找到一种方法来遍历对象的属性,而无需将其名称更改为某种像1,2,3等女巫并不理想。

速度是我最关心的问题。

回答

2

你可以有另一个数组来存放你的密钥。像这样:

var obj = { 
    'key': 'value', 
    'some': 'other value' 
}, 
    arr = [ 'key', 'some' ]; 

for (var i = 0, l = arr.length; i < l; i++) { 
    console.log(obj[ arr[ i ] ]); 
} 

但是,这是丑陋的。在这种情况下的性能永远不会成为你的瓶颈,你应该更喜欢可读性。在那里的代码可以这样做:

Object.keys(obj).forEach(function(key) { 
    console.log(obj[ key ]); 
}); 

这是只是方式更干净,更具可读性。 (for..in也可以使用,它只是为了这个例子)

+0

这是一个很好的解决方法,谢谢你:) – Luka

+0

forEach函数结束后缺少右括号。 –

+0

@MarkKnol感谢您的错字,修复! –

2

你不行。对象没有索引属性。