【问题标题】:Looping through a list in Jade and Javascript在 Jade 和 Javascript 中循环遍历列表
【发布时间】:2017-07-26 14:15:42
【问题描述】:

我是 Javascript 编程新手。我正在尝试浏览书籍列表并将书名分配给一个数组,以便我可以使用 jQuery 将其绑定到自动完成文本框。以下是我的代码 -

block content

  script.
    $( function() {

      var availableTags = [];

      for (i=0; i < #{books.length}; i++) {
        availableTags[i] = #{books[i].title};
      }

      $( "#tags" ).autocomplete({
        source: availableTags
      });
    });

  div.ui-widget
    label(for="tags") Tags: 
    input(id="tags")

我的问题在于线路 -

availableTags[i] = #{books[i].title};

如果我使用常量,例如 -

availableTags[i] = #{books[0].title};

这很好用。但是如果使用变量 i,我会得到一个错误“无法读取未定义的属性标题”。

我做错了什么?

【问题讨论】:

  • 会不会是key 0 没有定义?书的内容是什么?
  • 不相关,但您应该声明您的i,即for (let i=0;...
  • 书籍在哪里定义?
  • 我正在为客户构建一个演示,所以它是故意简单化的。 “书”只是一个具有一个元素“标题”的对象。我有一个 nodejs/express 服务器代码,它可以获取“从书籍中选择 *”。
  • i 不存在于服务器端代码中,仅当该循环在浏览器中运行时。只需将整个 books 数组传递给客户端变量,不要在 &lt;script&gt; 标记中使用除此之外的任何模板代码

标签: javascript jquery pug


【解决方案1】:

如果#{books[0].title} 可以,请检查#{books.length}。您的长度可能高于实际数组的长度。

【讨论】:

  • books.length 给了我正确的结果。为了确保我不会发疯,我也将其更改为常数(i
  • i 值怎么样?按照 Ulysse BN 的建议,尝试按照 for (let i=0; i&lt;5; i++) 重写你的 for 循环
  • 然后,正如错误告诉您的那样,您循环浏览的至少一本书籍不存在或以undefined 值存在
  • 你能用 forEach 遍历书籍以查看是否有未定义的值吗?像这样#{books}.forEach( function (item) { console.log(item) })
猜你喜欢
  • 2015-03-17
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多