在Express/EJS模板中,遍历数组的最清晰方法是什么?

28

我有一个使用EJS模板的Express.js应用程序。我成功地使用传统的JS语法循环遍历了一个数组:

<% for (var i = 0; i < myArray.length; i++) { 
    this = myArray[i];
    // display properties of this
} %>

但是我在想,有没有更简洁的方法来做到这一点呢?

具体来说,我能否使用Underscore或Lodash来用.each循环遍历?谢谢

2个回答

71

你可以使用 forEach 方法。

myArray.forEach(function(el, index) {
    // el - current element, i - index
});

但是,当我从数组中删除一个元素时,索引不会自适应。这种情况该如何解决? - Emanuela Colta
@Emanuelacolta,您不能在forEach循环中删除您的项目。您应该将要删除的元素的索引保存在单独的数组中,并在完成forEach循环后删除它们。(并且您需要按相反的顺序删除它们,以便在删除时数组的索引不会发生变化) - Dimitry K

0

@wachme的回答是正确的,但为了保持原始问题,这里是使用Underscore的_.each版本(并集成在模板语法中):

<% _.each(myArray, function(el, index) { %>
    Value is <%= el %>, index is <%= index %>.
<% }) %>
< p > Array.prototype.forEach 的优点是您不需要在模板中依赖 Underscore。而 _.each 的优点是它有一些额外的技巧(例如,它也适用于对象),并且它可以在旧的 JS 环境中工作,无需任何 polyfills。

另外,Underscore 的 _.template 可以用来代替 EJS,虽然它的功能较少。此外,两个库之间的 <%=<%− 的含义被交换了。当然,在 Underscore 模板中始终可以使用 _.each


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接