javascript - 按索引从数组输出返回未定义

标签 javascript arrays json node.js ejs

我正在尝试输出位于 json 对象中的数组的特定索引。

例如,我从 MongoDB 检索了以下 json 对象

{ _id: 55b65199c92d15d80fd94803,
  site: 'test.com',
  company: 'test',
  __v: 0,
  votes: [
     { vote_user: '55a11de3e4c770982730ccb9' },
     { vote_user: '55a11de3e4c770982730612a' } 
  ] 
}

该对象作为名为 suggest 的对象从 Nodejs 路由渲染传递,并通过 EJS 循环使用

 <% suggestion.forEach(function(item){ %><%}%>

在此阶段,我尝试使用以下方法从 votes 数组中检索特定的 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 值而不是未定义的值。

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文档如开头所写

最佳答案

对已编辑问题的回答:

首先,您的id需要是一个字符串。问题似乎出在使用<%-标签。也许您可以找到有关其工作原理的文档,但在网站上进行测试时,这根本不起作用<%=工作完美。精简概念证明:

<%
var suggestion = [{ _id: '55b65199c92d15d80fd94803',
  site: 'test.com',
  company: 'test',
  __v: 0,
  votes: [
     { vote_user: '55a11de3e4c770982730ccb9' },
     { vote_user: '55a11de3e4c770982730612a' } 
  ] 
}];
%>

<% suggestion.forEach(function(item, i){ %>
<div class="suggestion-entry suggestion-<%= item._id %>" data-entry="<%= item._id %>">
  <li><%= item.votes[0].vote_user %></li>
  <li><%= item.site %></li>
  <li><%= item.company %></li> 
</div>
<% }); %>

将其粘贴到网站上的测试文本区域中,您将看到它的工作原理。如果这仍然不适用于您的代码,则说明发生了完全不同的情况。

关于javascript - 按索引从数组输出返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31658229/

相关文章:

json - 调用函数 'makeDecorator' ,不支持函数调用

javascript - Html Javascript网站在移动设备上删除水平滚动

javascript - 如何识别大型数组中的重复项?

javascript - SocketIO网络/电源故障问题

jquery - 删除重复数组 jQuery

php - PHP 中有简单的 usort 吗?

c# - 测试自定义 JsonConverter 时出现异常

jquery - 无法在 JQuery $.get() 中返回/处理 JSON

javascript - 禁用 JavaScript 时的 WebdriverIO 自动化测试

javascript - 可以在 PDF 中嵌入 javascript 并在浏览器窗口中打开 PDF 时触发它吗?