jquery $ .each()超过json对象迭代计数

时间:2015-08-04 15:17:57

标签: jquery json

我有一个简单的json对象" obj"像这样

var obj = {"a" : "x", "b" : "y", "c" : "z"}

我使用以下代码遍历该对象:

$.each(obj, function(index, element) {
    console.log("Now I'm at index " + index);
});

这当然会产生一系列:

  

现在我在索引a   现在我在索引b
  现在我在索引c

但我希望看到的是:

  

现在我在索引0处   现在我在索引1处   现在我在索引2

但我无法弄清楚如何做到没有必须使用我需要在此循环中增加的任何其他变量。

提前致谢,

1 个答案:

答案 0 :(得分:2)

取自this SO回答:

  

如果对象的顺序很重要,您应该修改JSON模式以将对象存储在数组中:

     

正如Ben Alpert指出的那样,Javascript对象的属性是无序的,如果您希望它们按照与对象文字中指定的顺序相同的顺序进行枚举,那么您的代码就会被破坏 - 没有“第一”属性。

对象没有订购,不要指望它们。

编辑:我注意到你不想使用变量来增加。所以这是另一种解决方案。

将对象存储在数组中,然后遍历该数组。

var arrayOfObjects = [
    {"a" : "x"},
    {"b" : "y"},
    {"c" : "z"}
]
$.each(arrayOfObjects, function(index, object){
    console.log('index', index);
    console.log('object', object);
})

请注意我如何稍微更改arrayOfObjects

这将产生:

index 0
object Object {a: "x"}
index 1
object Object {b: "y"}
index 2
object Object {c: "z"}

原始答案(如果这对其他人有用):

您应该在函数中使用变量。

var index = 0;
$.each(obj, function(key, value) {
    console.log("Now I'm at index " + index);
    index++;
});

注意我现在如何使用(key,value)而不是(index,element)。 在jQuery的each documentation上他们提到:

  

如果一个对象被用作集合,则每次都会向回调传递一个键值对:

 var obj = {
  "flammable": "inflammable",
  "duh": "no duh"
};
$.each( obj, function( key, value ) {
  alert( key + ": " + value );
});
  

再一次,这会产生两条消息:

     易燃:易燃

     

duh:no duh