【问题标题】:How to iterate over this object [duplicate]如何迭代这个对象[重复]
【发布时间】:2012-05-23 10:18:17
【问题描述】:

我有这个对象:

var navArray = {
  '#item1' : 0,
  '#item2' : 1,
  '#item3' : 2,
  '#item4' : 3,
  '#item5' : 4,
  '#item6' : 5
}

下面代码中的 ident var 是一个数字,我需要找出它对应于数组中的哪个属性...所以如果 ident 为 1,我想找回 #item2 ..

我该怎么做?

var navArray = {
  '#item1' : 0,
  '#item2' : 1,
  '#item3' : 2,
  '#item4' : 3,
  '#item5' : 4,
  '#item6' : 5
}
if(typeof(ident) === "number") {
    for(i in navArray) {
    }
}

【问题讨论】:

  • navArray[i] 应该这样做
  • 你的navArray 根本不是一个数组。使用navArray = ['#item1', '#item2', '#item3', ...] 有什么问题吗?然后你就可以直接索引到它:navArray[ident]
  • @K Ivanov:您的解决方案假定数据已排序。 elduderino,这个对象是否总是相同的,所以排序是一个安全的假设?
  • 重要的是要注意这个例子不是一个数组,而是一个对象/映射/关联数组(无论你想怎么称呼它)——你可以通过{} 语法 - 数组使用 []。您的变量名称令人困惑。如果您想迭代数组,请参阅stackoverflow.com/a/3010848/251185

标签: javascript


【解决方案1】:

这应该可行:

var ident = 1,
    target = null;
for (var key in navArray) {
    if (navArray.hasOwnProperty(key)) { 
        if (navArray[key] === ident) {
            target = key;
            break;
        }
    }
}

alert (target); // "#item2"

【讨论】:

  • 在这种情况下:navArray.hasOwnProperty(key) 不会返回 true??
  • @yankee:根据 Crockford:“请注意,添加到对象原型中的成员将包含在枚举中。明智的做法是使用 hasOwnProperty 方法进行防御性编程来区分对象的真正成员。”
猜你喜欢
  • 2014-04-16
  • 2019-02-16
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 2013-11-03
相关资源
最近更新 更多