JavaScript通过json数组循环?

我想循环通过以下的JSON数组:

{ "id": "1", "msg": "hi", "tid": "2013-05-05 23:35", "fromWho": "hello1@email.se" }, { "id": "2", "msg": "there", "tid": "2013-05-05 23:45", "fromWho": "hello2@email.se" } 

并尝试了以下

  for (var key in data) { if (data.hasOwnProperty(key)) { console.log(data[key].id); } } 

但由于某种原因,我只得到第一部分,身份证1值。

有任何想法吗?

你的JSON应该是这样的:

 var json = [{ "id" : "1", "msg" : "hi", "tid" : "2013-05-05 23:35", "fromWho": "hello1@email.se" }, { "id" : "2", "msg" : "there", "tid" : "2013-05-05 23:45", "fromWho": "hello2@email.se" }]; 

你可以像这样循环数组:

 for(var i = 0; i < json.length; i++) { var obj = json[i]; console.log(obj.id); } 

或者像这样(Ericbuild议)要小心IE支持

 json.forEach(function(obj) { console.log(obj.id); }); 

你的代码有几个问题,首先你的json看起来像这样:

 var json = [{ "id" : "1", "msg" : "hi", "tid" : "2013-05-05 23:35", "fromWho": "hello1@email.se" }, { "id" : "2", "msg" : "there", "tid" : "2013-05-05 23:45", "fromWho": "hello2@email.se" }]; 

接下来,你可以像这样迭代:

 for (var key in json) { if (json.hasOwnProperty(key)) { alert(json[key].id); alert(json[key].msg); } } 

它会给出完美的结果。

看这里的小提琴: http : //jsfiddle.net/zrSmp/

由于我已经开始研究它:

 var data = [{ "id": "1", "msg": "hi", "tid": "2013-05-05 23:35", "fromWho": "hello1@email.se" }, { "id": "2", "msg": "there", "tid": "2013-05-05 23:45", "fromWho": "hello2@email.se" }] 

而这个function

 var iterateData =function(data){ for (var key in data) { if (data.hasOwnProperty(key)) { console.log(data[key].id); } }}; 

你可以这样称呼它

 iterateData(data); // write 1 and 2 to the console 

Erics评论后更新

正如eric指出的一个for in循环中的数组可以有意想不到的结果 。 引用的问题对利弊有冗长的讨论。

testing与(var我…

但是现在看来,这样的事情是非常节省的:

 for(var i = 0; i < array.length; i += 1) 

虽然在铬testing有以下结果

 var ar = []; ar[0] = "a"; ar[1] = "b"; ar[4] = "c"; function forInArray(ar){ for(var i = 0; i < ar.length; i += 1) console.log(ar[i]); } // calling the function // returns a,b, undefined, undefined, c, undefined forInArray(ar); 

.forEach()testing

至less在铬30这个按预期工作

 var logAr = function(element, index, array) { console.log("a[" + index + "] = " + element); } ar.forEach(logAr); // returns a[0] = a, a[1] = b, a[4] = c 

链接

  • 参见for in mdn
  • 新的forEach方法
  • 一个评论说,arrays理解使得不那么糟糕
  • 在firefox 2中使用javascript 1.7引入的数组理解 (yes 2)

它必须是一个数组,如果你想迭代它。 你很可能会失踪[]

 var x = [{ "id": "1", "msg": "hi", "tid": "2013-05-05 23:35", "fromWho": "hello1@email.se" }, { "id": "2", "msg": "there", "tid": "2013-05-05 23:45", "fromWho": "hello2@email.se" }]; var $output = $('#output'); for(var i = 0; i < x.length; i++) { console.log(x[i].id); } 

看看这个jsfiddle: http : //jsfiddle.net/lpiepiora/kN7yZ/

有点晚,但我希望我可以帮助别人:D

你的json需要看起来像Niklas已经说过的东西。 然后在这里你去:

 for(var key in currentObject){ if(currentObject.hasOwnProperty(key)) { console.info(key + ': ' + currentObject[key]); } } 

如果你有一个Multidimensional数组,这是你的代码:

 for (var i = 0; i < multiDimensionalArray.length; i++) { var currentObject = multiDimensionalArray[i] for(var key in currentObject){ if(currentObject.hasOwnProperty(key)) { console.info(key + ': ' + currentObject[key]); } } } 

它的工作。 我只是将方括号添加到JSON数据。 数据是:

 var data = [{ "id": "1", "msg": "hi", "tid": "2013-05-05 23:35", "fromWho": "hello1@email.se" }, { "id": "2", "msg": "there", "tid": "2013-05-05 23:45", "fromWho": "hello2@email.se" }] 

循环是:

 for (var ke in data) { if (data.hasOwnProperty(ke)) { alert(data[ke].id); } } 

那么,我只能看到有两个JSON对象,用逗号分开。 如果他们都在一个数组( [...] ),这将是更有意义的。

而且,如果它们在数组中,那么你只需要使用标准的“for var i = 0 …”types的循环。 实际上,我认为它将尝试检索string“1”的“id”属性,然后是“hi”的“id”,依此类推。

 var arr = [ { "id": "1", "msg": "hi", "tid": "2013-05-05 23:35", "fromWho": "hello1@email.se" }, { "id": "2", "msg": "there", "tid": "2013-05-05 23:45", "fromWho": "hello2@email.se" } ]; 

forEach方法易于实现。

 arr.forEach(function(item){ console.log('ID: ' + item.id); console.log('MSG: ' + item.msg); console.log('TID: ' + item.tid); console.log('FROMWHO: ' + item.fromWho); }); 

使用map和箭头function的简短解决scheme

 var data = [{ "id": "1", "msg": "hi", "tid": "2013-05-05 23:35", "fromWho": "hello1@email.se" }, { "id": "2", "msg": "there", "tid": "2013-05-05 23:45", "fromWho": "hello2@email.se" }]; data.map((item, i) => console.log('Index:', i, 'Id:', item.id)); 

for好像没有很好的格式。 并尝试把你的对象到一个数组中。

我更喜欢jQuery的循环语法:

 $(data).each(function(){ console.log($(this).id); });