2017-11-30 19 views
-1

객체의 키를 기반으로 값을 얻기 위해 객체를 반복하려고합니다. 루프/개체를 통해 작업 할 변수를 사용하려고합니다. 미리 값을 설정하면 데이터를 얻습니다. "i"를 통해 반복으로 정의 된 변수로 값을 설정하려고하면 정의되지 않은 오류가 발생합니다. 이견있는 사람. 파선 용입니다. 데이터는 Sails.js 쿼리에서 가져옵니다.Pug.js Sails.js 자바 스크립트 for 루프 문제

미리 "0"으로 설정하면됩니다. 나는 데이터를 얻는다. 단지 객체의 키를 반복하고, 가지고있는 for() 때문에 외부 루프를 필요로

TypeError: /Users/mnelson/Documents/Personal/My Design Musings/sails/MIE Sails/views/reviews/reviews.pug:8 
    6|  -var i=0; 
    7|  -for (var key of Object.keys(thereviews.schoolreviews[i])) { 
    > 8|   p= key + ": " + thereviews.schoolreviews[i].RID 
    9|  -i++ 
    10|  -} 
    11|  table.table 

Cannot read property 'RID' of undefined 
at eval (eval at wrap (/Users/mnelson/Documents/Personal/My Design Musings/sails/MIE Sails/node_modules/pug-runtime/wrap.js:6:10), <anonymous>:145:98) 
    at template (eval at wrap (/Users/mnelson/Documents/Personal/My Design Musings/sails/MIE Sails/node_modules/pug-runtime/wrap.js:6:10), <anonymous>:342:101) 
    at /usr/local/lib/node_modules/sails/node_modules/consolidate/lib/consolidate.js:808:16 
    at /usr/local/lib/node_modules/sails/node_modules/consolidate/lib/consolidate.js:143:5 
    at Promise._execute (/usr/local/lib/node_modules/sails/node_modules/bluebird/js/release/debuggability.js:303:9) 
    at Promise._resolveFromExecutor (/usr/local/lib/node_modules/sails/node_modules/bluebird/js/release/promise.js:483:18) 
    at new Promise (/usr/local/lib/node_modules/sails/node_modules/bluebird/js/release/promise.js:79:10) 
    at promisify (/usr/local/lib/node_modules/sails/node_modules/consolidate/lib/consolidate.js:136:10) 
    at exports.pug (/usr/local/lib/node_modules/sails/node_modules/consolidate/lib/consolidate.js:792:10) 
    at SailsView.sails.config.views.engine.fn [as engine] (/usr/local/lib/node_modules/sails/lib/hooks/views/configure.js:83:7) 
    at SailsView.View.render (/usr/local/lib/node_modules/sails/node_modules/@sailshq/express/lib/view.js:76:8) 
    at Function.app.render (/usr/local/lib/node_modules/sails/node_modules/@sailshq/express/lib/application.js:561:10) 
    at ServerResponse.res.render (/usr/local/lib/node_modules/sails/node_modules/@sailshq/express/lib/response.js:845:7) 
    at ServerResponse.res.view (/usr/local/lib/node_modules/sails/lib/hooks/views/res.view.js:284:16) 
    at /Users/mnelson/Documents/Personal/My Design Musings/sails/MIE Sails/api/controllers/ReviewsController.js:14:20 
    at wrapper (/usr/local/lib/node_modules/sails/node_modules/lodash/index.js:3592:19) 
    at applyInOriginalCtx (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.js:421:80) 
    at wrappedCallback (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.js:324:18) 
    at success (/usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/switchback/lib/normalize.js:33:31) 
    at _switch (/usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/switchback/lib/factory.js:58:28) 
    at returnResults (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/basic.js:179:9) 
    at /usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/basic.js:91:16 
+0

것은 당신이 콘솔 있습니다 : 그것은 당신이 시도 할 수 아니라면

console.log( thereviews.schoolreviews .map( (item,index) => '${index}: ${item.RID}' ) ); 

을 .log'Array.isArray (thereviews.schoolreviews)'당신의 코드는별로 의미가 없습니다. 당신이하고 싶은 것은 무엇입니까? – HMR

답변

0

: 나는

-var i=0; 
    -for (var key of Object.keys(thereviews.schoolreviews[i])) { 
    p= key + ": " + thereviews.schoolreviews[i].RID 
    -i++ 
    -} 

에 루프를 변경하는 경우

-var i=0; 
    -for (var key of Object.keys(thereviews.schoolreviews[0])) { 
    p= key + ": " + thereviews.schoolreviews[0].RID 
    -i++ 
    -} 

나는이 오류 for() 안에 i++이 있으면 인덱스가 범위를 벗어날 수 있습니다. 또한 하드 코드 된 RID을 제거하고 더 안전한 곳에서 [key] 접근자를 사용하고 있습니다. 데이터가 잘못 작성된 경우 더 안전합니다.

- var i=0; 
- while(i < thereviews.schoolreviews.length) 
    - for (var key of Object.keys(thereviews.schoolreviews[i])) { 
    p= key + ": " + thereviews.schoolreviews[i][key] 
    - } 
    - i++ 
0

나는 shoolreviews가 배열 인 경우 확실하지 않다하지만이 경우에는 다음을 수행 할 수

console.log(
    Object.keys(thereviews.schoolreviews) 
    .map(
    (key) => `${key}: ${thereviews.schoolreviews[key].RID}` 
) 
);