繁体   English   中英

Object.keys迭代数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM