EJS中filter过滤数组后无法读取nPostagens属性的问题求助
问题根因
Array.filter() 是数组的过滤方法,执行后会返回所有符合条件的元素组成的新数组,而非单个匹配对象。你之前直接对返回的数组访问nPostagens属性,数组本身不存在这个属性,所以返回undefined;最后一种写法语法结构错误,JS解析器无法识别数组和后面的i之间的关系,因此抛出语法错误。
解决方法
方案1(推荐,性能更优):用find()替代filter()
你的场景是匹配nick字段,通常用户表的nick是唯一值,用find()会直接返回第一个符合条件的单个对象,找不到则返回undefined,写法如下:
<!-- 支持可选链操作符的Node.js环境(Node 14+)直接这么写 --> <%= results7.find(i => i.nick === req.autor)?.nPostagens %>
如果是低版本Node不支持可选链,加一层兼容判断即可:
<% const matchedUser = results7.find(i => i.nick === req.autor) %> <%= matchedUser ? matchedUser.nPostagens : '' %>
方案2:坚持用filter()的情况
如果你需要保留filter()写法,需要手动取匹配数组的第一个元素下标,再访问属性:
<%= results7.filter(i => i.nick === req.autor)[0]?.nPostagens %>
同样可以加空判断避免无匹配项时的报错:
<% const matchedUsers = results7.filter(i => i.nick === req.autor) %> <%= matchedUsers.length > 0 ? matchedUsers[0].nPostagens : '' %>
内容的提问来源于stack exchange,提问作者Kauan Chagas
相关产品推荐
相关产品推荐

