2016-09-19 8 views
0

couchDb의 자바 스크립트 코드에서 배열의 값을 검색하는 for 루프가 있습니다. 나는 그것을 기능으로 만들고 싶다. 이것은 매우 간단해야하지만 나는 그것에 문제가 있습니다. 이것은 (완벽하게 잘 작동한다) for 루프입니다 :자바 스크립트에서 for 루프 함수를 선언하십시오.

if (newDoc.destination && newDoc.destination.length > 0) { 
    for (var i = 0; i < newDoc.destination.length; i++) { 
     if (newDoc.destination[i].address) return; 
    } 
} 
throw({forbidden: 'doc.address is required'}); 

을 그리고 이것은 내가 함수에 싸서 방법입니다 :

function arrayReq(field, message) { 
    message = message || "Array must have a " + field; 
    if (newDoc.destination && newDoc.destination.length > 0) { 
     for (var i = 0; i < newDoc.destination.length; i++) { 
      if (newDoc.destination[i].field) return; 
     } 
    } 
    throw({forbidden: message}); 
} 

내가 함수의 반환이를 중지해야한다고 생각합니다 기능은 더 이상 진행되지 않지만 여전히 오류가 발생합니다. 누군가 내가 뭘 잘못하고 있다고 말할 수 있습니까? Btw 내가 주소로 필드를 변경하면 잘 작동합니다. 주소를 변경 가능한 변수로 만들 수 없습니까?

+1

*에 array.destination[i].field에서 변경

봅니다 "나는 함수에서 반환이 더가는 기능을 중지해야한다고 생각하지만, 여전히 오류가 발생합니다."* 그것은 않습니다. 'newDoc.destination [i] .field'가 사실이라면, 그 함수는 결국'throw'에 도달하지 않을 것입니다. 문제는 다른 곳에서 발생합니다. –

+0

주 :'throw'는 함수가 아니므로'()'에 피연산자를 래핑 할 필요가 없습니다. 그런데, 당신이 좋아하는 어떤 객체라도 던질 수는 있지만, 일반적으로'Error'의 인스턴스를 던지는 것이 최상입니다. –

+0

http://stackoverflow.com/questions/4244896/dynamically-access-object-property-using-variable의 사본으로 폐쇄되어야합니다. –

답변

2

나는 문자열 변수와 객체의 속성을 destination[] 배열로 사용하여 field을 사용하려고합니다. destination[i] 객체가 field라는 속성 (안 field 매개 변수에 채워 문자열 값,하지만 "필드"라는 이름의 실제 속성)이없는 경우 코드에서

, 그것이 사실로 평가하지 않으며 벗어나 않을 것이다 기능.

자바 스크립트에서 문자열 표현을 사용하여 개체의 속성에 액세스하려면 인덱서 구문을 사용합니다. array.destination[i][field]

+0

잘 찾아 냈습니다! ... –

+0

오우 알겠습니다. 정말 고맙습니다. 나는 자바 스크립트에 상당히 익숙하다. – Anna