[javascript] JSON 배열을 통한 JavaScript 루프?
다음 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);
}
}
그러나 어떤 이유로 든 첫 번째 부분 인 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);
}
또는 이와 같이 (Eric에서 제안한) 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 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);
});
답변
이 시도
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"
}];
json.forEach((item) => {
console.log('ID: ' + item.id);
console.log('MSG: ' + item.msg);
console.log('TID: ' + item.tid);
console.log('FROMWHO: ' + item.fromWho);
});
답변
내가 이미 살펴보기 시작한 이래 :
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"
}]
그리고이 기능
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
에릭스 의견 후 업데이트
eric가 지적한 것처럼 배열 의 for in
루프는 예상치 못한 결과를 초래할 수 있습니다 . 참조 된 질문에는 장단점에 대한 긴 토론이 있습니다.
for (var i …로 테스트
그러나 다음과 같은 내용은 다음과 같습니다.
for(var i = 0; i < array.length; i += 1)
크롬 테스트 결과는 다음과 같습니다.
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()
적어도 크롬 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 메소드
- 배열 이해가
for in
덜 나쁘다 는 의견 - Firefox 2에서 Javascript 1.7로 도입 된 배열 이해 (예 2)
답변
작동 중입니다. 방금 대괄호를 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 key in data) {
if (data.hasOwnProperty(key)) {
alert(data[key].id);
}
}
답변
반복하려면 배열이어야합니다. 당신은 가능성이 누락 [
및 ]
.
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/