EJS循环中动态拼接属性名获取获胜者姓名返回NaN问题求解
问题解决方法
错误原因
你的代码问题源于运算符优先级和动态属性访问语法错误:
- JavaScript 中
.运算符优先级高于+,你写的event[0].winner+i.name实际执行时会先读取event[0].winner(你的数据中不存在该属性,返回undefined),再读取i.name(i是数字类型,没有name属性,返回undefined),两者相加最终得到NaN。 - 动态拼接的属性名不能用
.直接访问,需要使用方括号[]语法读取对象属性。
修复方案
将原来的取值代码替换为方括号动态属性访问写法即可,完整循环代码如下:
<% for (var i=1; i <= event[0].eventWinners; i++ ) { %> <td> <%= event[0]['winner' + i].name %> </td> <% } %>
补充说明:你给出的样本数据存在语法笔误,event[0]应为对象而非数组,只要实际数据结构符合event[0]下挂载winner1到winnerN属性的结构,上述代码就可以正常输出对应获胜者的name值。
内容的提问来源于stack exchange,提问作者creativated
相关产品推荐
相关产品推荐

