【问题标题】:jquery $.each() over json object iteration countjquery $.each() 超过 json 对象迭代计数
【发布时间】:2015-10-27 02:00:48
【问题描述】:

我有一个像这样的简单 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

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

提前致谢,

【问题讨论】:

  • 使用额外的计数器变量会有什么问题?
  • 感谢您提醒我们注意试图将Object.keys() 应用于 JSON 字符串 的错误答案。 6 票赞成,但没有人想过要测试该代码。
  • 你不能。不能保证对象的顺序,但可以保证数组的顺序。因此,在迭代对象时您没有索引,因为您将无法使用它从对象中检索数据。但是,有了数组,您就可以做到。

标签: jquery json


【解决方案1】:

取自this所以回答:

如果对象的顺序很重要,您应该修改 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) 而不是(索引,元素)。 在 jQuery 的 each documentation 上,他们提到:

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

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

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

易燃:易燃

duh:不,duh

【讨论】:

    猜你喜欢
    • 2011-09-12
    • 2012-11-17
    • 2011-06-05
    • 2010-12-14
    • 2012-10-17
    • 1970-01-01
    • 2016-07-13
    • 2011-11-04
    相关资源
    最近更新 更多