Node.js ejs如何迭代对象

Node.js ejs如何迭代对象,node.js,for-loop,express,ejs,Node.js,For Loop,Express,Ejs,我有一个简单的对象文本,地址如下所示 address: { country: String, state: String, city: String, zip: String, street: String } 它位于一个对象内部,我正在使用express.js渲染函数传递它 在我的模板页面中,我尝试在该对象内进行for循环,如图所示: <% for (var prop in artist.address ) { %> <%- ar

我有一个简单的对象文本,地址如下所示

address: {
    country: String,
    state: String,
    city: String,
    zip: String,
    street: String
}
它位于一个对象内部,我正在使用express.js渲染函数传递它

在我的模板页面中,我尝试在该对象内进行for循环,如图所示:

<% for (var prop in artist.address ) { %>
  <%- artist.address[prop] %>
<% } %>

那么,我需要如何迭代我的对象呢?

除了在上面添加的“自己的”属性之外,您还可以看到所有继承的属性

有两种方法可以解决这个问题。一种方法是使用
hasOwnProperty()
来确保看不到继承的属性:

<% for (var prop in artist.address) {
     if (Object.prototype.hasOwnProperty.call(artist.address, prop)) { %>
       <%- artist.address[prop] %>
<%   }
   } %>
<% Object.keys(artist.address).forEach(function(prop) { %>
   // ["country" , "state" , "city" etc ]
  <%- artist.address[prop] %> // so artist.address.state logs "New York City"
<% }); %>

由于这与mongoose有关,您也可以尝试迭代
artist.address.toObject()
(使用公共API)或
artist.address.\u doc
(使用私有API),或者在
artist
对象上迭代一个级别。

使用可以使用的普通JS

在你的例子中

var artist = { address: { city: 'Tel Aviv' } };
Object.keys(artist.address).forEach(function(key){
  <%- artist.address[city] %> //key will city the output will be 'Tev Aviv' 
});

好的,我开始解释,这是一个解释, 我有一个目标:

address : {
  country: String,
  state: String,
  city: String,
  zip: String,
  street: String
}
我只需要显示这些属性,而不是继承一次,因此我迭代对象并获得它自己的属性:

<% for (var prop in artist.address) {
     if (Object.prototype.hasOwnProperty.call(artist.address, prop)) { %>
       <%- artist.address[prop] %>
<%   }
   } %>
<% Object.keys(artist.address).forEach(function(prop) { %>
   // ["country" , "state" , "city" etc ]
  <%- artist.address[prop] %> // so artist.address.state logs "New York City"
<% }); %>
所以我检查了包含如下字符串的属性:

<% Object.keys(artist.address).forEach(function(prop) {
  if( typeof artist.address[prop] == "string" ) { %>
    <%- artist.address[prop] %>
  <% } %>
<% }); %> 


这里的答案很好:
地址
实际上是一个
猫鼬.Schema
艺术家.地址
是一个
猫鼬.Document
?不,艺术家是一个猫鼬.Schema var artistSchema=mongoose.Schema({地址:{国家:字符串,州:字符串,城市:字符串,邮编:字符串,街道:字符串},仍然在做:正在返回:函数(){returnthis.get(path);}function(){returnthis.get(path);}yafo 09988意外属性的名称是什么?您需要确定何时要使用ejs客户端或服务器。如果您在服务器端使用ejs客户端或服务器,并让我们说它的express:return对象应该如下所示:controller:return res.render('template/something.ejs',{ux:require('lodash'),artist:artistDocument);查看模板客户端仅使用cdn服务获取lodash这回答了如何使用Javascript进行迭代,OPs标题问题是如何使用EJS进行迭代。对于那些在标题中寻找问题答案的人来说,这一回答具有误导性。
<% Object.keys(artist.address).forEach(function(prop) { %>
   // ["country" , "state" , "city" etc ]
  <%- artist.address[prop] %> // so artist.address.state logs "New York City"
<% }); %>
function () { return this.get(path); } function () { return this.get(path); }
<% Object.keys(artist.address).forEach(function(prop) {
  if( typeof artist.address[prop] == "string" ) { %>
    <%- artist.address[prop] %>
  <% } %>
<% }); %>