2016-11-22 1 views
-1

foreach를 사용하여 JSON 객체를 반복 할 때이 오류가 발생합니다. 누군가 도움이 될 수 있습니까? 여기 forEach는 함수 오류가 아닙니다

내 JS입니다 :

function dateTimeChecker() { 
    $.ajax({ 
      "url": 'get-booked.php', 
      "method": "get", 
      "dataType": "text", 
      "cache": false 
     }).done(function(jBooked) { 
      var jBookedDates=JSON.parse(jBooked); 
      console.log(jBookedDates); 
       jBookedDates.forEach(function(jB){ 
        if (jB=="11/01/2016") {console.log("works");}else{console.log("doesn't");} 
     }) 
     }); 
} 

그리고 여기에 문제의 객체입니다 또한

enter image description here

, 나는 누군가가 설명하는 관심 있다면이 객체를 반복 할 수있는 방법 궁금 . :)

+0

AJAX 호출없이 [mcve]를 만들 수 있습니까? 오류를 재현 할 수 없습니다. –

+0

해당 객체가 배열이 아닙니다. 아마 여기서 foreach를 사용할 수 없습니다. – Mahi

+0

미안하지만, 나는 아약스도 넣는 것이 합리적이라고 생각했다. –

답변

3

받고있는 응답은 JSON입니다. 배열 객체의 메서드 forEach을 일반 객체 위에 사용할 수 없습니다. 당신은, 당신이 그 배열에 액세스 할 수 브래킷 표기법을 사용하여 주석에 쿼리

Object.keys(jBookedDates).forEach(function(jB){ 
if (jB=="11/01/2016") { 
    console.log("works"); 
} else { 
    console.log("doesn't"); 
} 
}); 

, 구문 분석 JSON에 속하는 열거 자신의 속성을 검색하기 위해 이러한 맥락에서 Object.keys()를 사용할 필요가

Object.keys(jBookedDates).forEach(function(jB){ 
    var arr = jBookedDates[jB]; 
    console.log(arr); //will print the array belongs to each property. 
}); 
+0

감사합니다. 나는 작동하지만, 이제는 각각의 객체에 포함 된 배열에 어떻게 접근 할 수 있는지 궁금하다. 도울 수 있니? –

+0

@RobertRoss 내 편집을보세요. –

3

foreach는 배열에서만 작동하므로 객체를 반복하려는 경우가 수행해야합니다 :

for (var attr in obj) { 
    // attr is your obj object attribute 
    if (obj.hasOwnProperty(attr)) { 
     // the magic goes here 
    } 
} 
+2

hasOwnProperty 검사없이'for'를 사용하면 프로토 타입 열거 가능 속성도 가로 지르게됩니다. –

+0

오, 여기에 넣는 것을 잊어 버렸습니다. 감사합니다 @ RajaprabhuAravindasamy – MarioAleo

2
Object.keys(a).forEach(elem => { console.log(a[elem]) }) 
3

어떻게이 객체

당신은 할 수없는 반복 할 수 있지만,이 오브젝트의 속성을 반복 할 수 있습니다. 이 작업은 Object.keys()을 사용하여 이루어지며 배열이 개체의 속성 (또는 키)으로 채워집니다.

Object.keys(jBookedDates).forEach(function(key) { 
    //jBookedDates[key] will give you the value for the current property 
}); 

.forEach 실제로 Array.prototype.forEach 있음을 유의하시기 바랍니다. 즉, 함수는 배열에서 호출됩니다 아니요 개체입니다.

1

대신 for..in을 사용하지 않는 이유는 무엇입니까?

예는 :

function dateTimeChecker() { 
$.ajax({ 
     "url": 'get-booked.php', 
     "method": "get", 
     "dataType": "text", 
     "cache": false 
    }).done(function(jBooked) { 
     var jBookedDates=JSON.parse(jBooked); 
     console.log(jBookedDates); 
     for (key in jBookedDates) { 
      if (jBookedDates.hasOwnProperty(key)) 
       if (jBookedDates[key] == "11/01/2016") 
       { 
        console.log("works"); 
       } else { 
        console.log("doesn't"); 
       } 
} 
    }); 

}

항상 jQuery를 솔루션에 기본으로하지 도움이됩니다. 바닐라 자바 ​​스크립트의 메커니즘을 이해하면 라이브러리가 특정 로직을 적용해야하는 영역 외부의 불필요한 복잡성이나 수정없이 해결할 수없는 많은 문제가 해결됩니다.

1

Array 클래스 메소드이므로 forEach을 사용하여 객체를 반복 할 수 없습니다.

객체를 사용 :

는 객체를 반복하는 몇 가지 방법이 있습니다.키()

당신은 개체의 키를 얻을 수 Object.keys() 방법을 사용는 다음 반복 :

var keys = Object.keys(jBookedDates); 

keys.forEach(function(key) { 
    var item = jBookedDates[key]; 
    // Do your logic here 
    // You will have access to the `key` variable and `item` variable 
} 

jQuery.each을 사용하여()

jQuery를은으로 모두 작동하는 개선 forEach 방법을 제공합니다 jQuery 컬렉션, 배열 또는 객체.

$.each(function(key, item) { 
    // Do your logic here 
    // You also will have access to `key` and `item` variables 
}); 

많은 다른 Javascript 프레임 워크/라이브러리는 사용자 정의 foreach 메소드를 제공합니다.

관련 문제