[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

연결


답변

작동 중입니다. 방금 대괄호를 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/