我目前在我的代码中使用两种迭代:
对于对象(片段 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 开始)?
[编辑] 我计划将它特别用于对象的深度合并。我当前的代码很重,因为在每个级别我都有 3 个分支,具体取决于类型(数组、对象或其他)。