[英]Object.keys to iterate arrays
我目前在代码中使用两种迭代:
对于对象(摘要1):
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
// do stuff with key and obj[key]
}
}
对于数组(摘要2):
for (var i=0, count=arr.length;i<count;i++) {
// do stuff with i and arr[i]
}
我想简化我的代码,并为对象和数组使用单个函数(代码段3):
var keys=Object.keys(arrorobj);
for (var i=0, count=keys.length;i<count;i++) {
// do stuff with keys[i] and arrorobj[keys[i]]
}
我知道代码片段3适用于对象,但是它也可以像我期望的那样与数组一起工作,并且替换代码片段1和2吗? 特别是,我可以确保在所有浏览器中(至少是那些支持Object.keys的浏览器),代码段3将遵循键顺序(从索引0开始)?
[edit]我计划将其特别用于对象的深度合并。 我当前的代码很繁琐,因为在每个级别上我都有3个分支,具体取决于类型(数组,对象或其他)。
当数组上唯一可枚举的属性是带编号的插槽( Array
的默认值)时,它将起作用,但是不能保证返回属性的顺序,因为它们被定义为for ( in )
顺序,该顺序并不总是数字迭代(取决于属性的分配方式)。
如果您分配了另一个属性,则也会对其进行枚举(使用更标准的迭代技术不会发生这种情况)。
对于空插槽(例如new Array(25)
),它的行为也不会完全一样,因为for
循环会在这些空位上进行迭代。
通常建议对Array或forEach()
方法(或相关方法forEach()
使用for
循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.