Eleventy自定义集合过滤时触发length读取未定义错误
问题排查与修复
你的代码报错核心原因是**forEach方法没有返回值**,它的执行结果是undefined,但Eleventy要求自定义集合必须返回一个数组(或可迭代集合),所以程序尝试读取undefined的length属性时抛出了错误。
把forEach换成filter就能解决问题,filter会自动筛选符合条件的元素并返回新数组:
eleventyConfig.addCollection("feed", function(collectionApi) { return collectionApi.getAll().filter(item => { return item.data.notetype === "feed"; }); });
补充说明
- 用
filter替代forEach是因为forEach仅遍历执行回调,不会生成新数组;而filter专门用于筛选数组元素,返回符合条件的新数组,完全匹配Eleventy自定义集合的要求。 - 后续给这个集合做分页的话,可在模板前置元数据中配置:
--- pagination: data: collections.feed size: 10 # 自定义每页显示条数 alias: feedPosts ---
之后在模板里遍历feedPosts即可渲染分页后的内容。
内容的提问来源于stack exchange,提问作者Yazae
相关产品推荐
相关产品推荐

