【问题标题】:Pug.js Sails.js Javascript for loop issuePug.js Sails.js Javascript for 循环问题
【发布时间】:2017-11-30 00:21:18
【问题描述】:

我正在尝试循环访问对象以根据对象中的键获取值。我正在尝试使用变量来处理循环/对象。如果我提前设置值,我会得到数据。如果我尝试使用通过“i”迭代定义的变量来设置值,我会得到一个未定义的错误。有什么想法吗。虚线代表哈巴狗。数据来自 Sails.js 查询。

如果我提前设置“0”。我得到数据。

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

如果我将循环更改为

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

我收到此错误:

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

【问题讨论】:

  • can you console.log Array.isArray(thereviews.schoolreviews) 你的代码没有多大意义,你想做什么?

标签: javascript sails.js pug pugjs


【解决方案1】:

您需要一个外部循环,因为 for() 只是在对象的键上进行迭代,并且在 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++

【讨论】:

    【解决方案2】:

    我不确定 shoolreviews 是否是一个数组,但如果是,您可以执行以下操作:

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

    如果不是你可以试试:

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

    【讨论】:

      猜你喜欢
      • 2020-09-15
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多