【问题标题】:Getting the key of an array item while in a numerically indexed loop [duplicate]在数字索引循环中获取数组项的键[重复]
【发布时间】:2012-08-05 00:27:43
【问题描述】:

可能重复:
For..In loops in javascript - key value pairs

我需要按顺序遍历一个数组,就像在this question 中一样。但是,我还需要访问 key 名称。在数字索引循环中如何做到这一点?

for(i=0; i<arr.length; i++){
    alert(arr[i].key); // clearly won't work
}

但是

for(key in arr){
    alert(arr[key]); // works, but it doesn't loop through in the right order
}

【问题讨论】:

  • 在迭代循环中,整数i 键...如果您有单独的键属性,那么您的第一个示例应该可以工作。
  • @Greg,为什么是重复的?我根本不是在问如何使用 PHP 样式 as。我在问如何在获得密钥的同时按顺序循环。
  • 你在使用任何库,比如 jQuery 吗?
  • @EricStrom,我正在使用一些 ajax 返回的 JSON,是的,我确实有可用的 jQuery。不过,我想不出如何让.each() 以这种方式在 JSON 上工作,如果这就是您的想法的话。
  • 这有点晚了,但是如果你返回将返回的 json 放入一个数组中使用 array = JSON.parse,你可以使用 jquery 的 .each(key, value) 遍历每个对象跨度>

标签: javascript for-loop associative-array


【解决方案1】:

如果你想对一个对象进行“排序”,那么你可以将键名放在一个数组中,对其进行排序,然后按照它们在数组中的顺序访问对象属性,例如:

var obj = { '3':3, '0':0, '2':2, '1':1};
var props = [];

for (var p in obj) {

  if (obj.hasOwnProperty(p)) {
    props.push(p);
  }
}

props.sort();

for (var i=0, iLen=props.length; i<iLen; i++0 {
  alert(obj[props[i]]); // 0, 1, 2, 3
}

关于对象属性的顺序,ES5 说:

枚举属性的机制和顺序(步骤 6.a) 第一个算法,第二个中的步骤 7.a) 没有指定。

http://es5.github.com/#x12.6.4

您可能会在一个流行库的 cmets 中发现“首先枚举自己的属性”的说法,这与至少一个广泛使用的浏览器的行为相矛盾,因此应该忽略。

【讨论】:

    【解决方案2】:

    您不能列出 JavaScript 对象的属性并期望它们按特定顺序返回。

    阅读此blog post 并查看有关 for 循环顺序的部分

    【讨论】:

    • 当然可以,正如here 指出的那样。链接中的所有循环都没有数字索引。我在询问数字索引循环(据我所知,按顺序排列)以及如何从它们中获取key
    • @brentonsrine — 在数组中,“索引”键(即数字属性)名称。
    • 如上文@TheZ 评论中所述,i 是关键。对不起,如果我错过了重点,但 key 表示对象的属性,而不是数组。
    • 废话,我想我假设可以通过数字循环遍历它。我想我真正的问题是如何按顺序遍历一个对象(或带有键的关联数组)。
    • 无论哪种情况,我都希望您能找到您要找的东西。 Chrome 可以让你做到这一点(在某种程度上可以预见),而其他浏览器则没有那么多。
    猜你喜欢
    • 2013-07-18
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 2012-05-18
    相关资源
    最近更新 更多