EJS中根据指定_id快速查询数组gudangs对应nama字段的方法
方案1:视图内直接使用Array.find()单条查询
如果仅需要查询1次对应ID的仓库名称,直接用数组的find方法即可,无需手动遍历判断:
<%= gudangs.find(gudang => gudang._id.toString() === '你的目标ID')?.nama || '未匹配到对应仓库' %>
注意:MongoDB返回的
_id是ObjectId对象类型,必须调用.toString()转为字符串后再和字符串ID做全等判断,否则会出现匹配失败的问题。其中可选链?.用来避免匹配不到数据时报错,后面的||可以设置匹配失败时的兜底展示内容。
方案2:控制器预处理为ID映射对象(适合多次查询场景)
如果你在视图中需要多次根据ID查询仓库名称,推荐在控制器传递数据前先把数组转为以ID为键、名称为值的映射对象,查询效率更高:
- 修改
app.js中的传递逻辑:
// 预处理生成ID到仓库名称的映射 const gudangMap = Object.fromEntries( gudangs.map(g => [g._id.toString(), g.nama || '未设置名称']) ) res.render('daftar-staff', { title: 'Daftar Staff', session: req.session, layout: 'layouts/main-layouts', gudangs, gudangMap // 新增传递映射对象 })
- EJS视图内直接取值即可:
<%= gudangMap['你的目标ID'] || '未匹配到对应仓库' %>
内容的提问来源于stack exchange,提问作者Herahadi An
相关产品推荐
相关产品推荐

