有没有办法在不使用for in循环的情况下迭代对象中的属性?
根据Nicholas C. Zakas的说法,for循环遍历一个对象比for循环需要花费8倍的时间,但是我找不到一种方法来迭代一个对象的属性,而不会将它们的名字改为类似1,2,3等女巫并不理想。
速度是我的主要关注点。
答案 0 :(得分:2)
你做不到。对象没有索引属性。
答案 1 :(得分: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
,这只是为了示例)