【发布时间】:2015-10-17 22:36:16
【问题描述】:
我正在尝试输出位于 json 对象中的数组的特定索引。
例如,我从 MongoDB 中获取了以下 json 对象
{ _id: 55b65199c92d15d80fd94803,
site: 'test.com',
company: 'test',
__v: 0,
votes: [
{ vote_user: '55a11de3e4c770982730ccb9' },
{ vote_user: '55a11de3e4c770982730612a' }
]
}
这个对象是从nodejs路由渲染传递过来的一个名为suggestions的对象,并且是通过EJS循环使用
<% suggestion.forEach(function(item){ %><%}%>
在这个阶段,我尝试使用从投票数组中检索特定的 vote_user 对象
<% suggestion.forEach(function(item){ %><%- item.votes[0] %><%})%>
然而,我得到的只是未定义
我尝试将“item”分配给一个 javascript 变量,然后将其记录到浏览器控制台,它完全按照我的意愿工作并期望它 - 因为我得到以下结果:
Object {vote_user: "55a11de3e4c770982730ccb9"}
真的无法理解为什么它不像我想象的那样工作。
编辑
由于有点不清楚设置的样子,下面是实际使用的代码:
EJS
<% suggestion.forEach(function(item, i){ %>
<div class="suggestion-entry suggestion-<%- item._id %>" data-entry="<%- item._id %>">
<!--<%- item %>-->
<div class="entry-info">
<div class="voting">
<script>
console.log(<%- item.votes %>[0].vote_user)
</script>
<%- item.votes[0].vote_user %>
<div class="vote vote-up"><a><i class="fa fa-chevron-up"></i></a></div>
<div class="vote vote-down"><a><i class="fa fa-chevron-down"></i></a></div>
</div>
<div class="image"><img src='http://placehold.it/130x90.jpg'></div>
<div class="company">
<h2><a href="<%= item.site %>"><%= item.company %></a></h2>
<span class="desc"><%= item.company %></span>
</div>
</div>
</div>
<% }); %>
脚本标签输出实际的 vote_user 值而不是 undefined。
Nodejs 路由
app.get('/', function(req, res) {
Suggestion.find(function(err, suggestions){
res.render('index', { message: req.flash('message'), title: "title", user : req.user, suggestion : suggestions });
})
});
MongoDB 文档和开头写的一样
【问题讨论】:
-
既然
item给了你{vote_user: "55a11de3e4c770982730ccb9"},你的suggestion变量似乎就是你的votes数组。所以在某些时候你可能做了类似suggestion = myJson.votes -
谢谢@Jan。问题是,
item按预期返回整个对象。所以当我去item.votes时,我得到了投票数组作为回报,所以在这种情况下[ { vote_user: '55a11de3e4c770982730ccb9' }, { vote_user: '55a11de3e4c770982730612a' } ]。如前所述,本机 javascript 似乎可以很好地处理这个问题,尽管当尝试对 EJS 做同样的事情时,它根本不起作用,我觉得这很奇怪。 -
我不知道 EJS 的语法但是
<%-应该是<%=吗? -
两者都试过了,但都没有比另一个更好。
<%-返回未转义的值,而<%=返回已转义的值
标签: javascript arrays json node.js ejs