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); });