在forEach循环中访问数据

时间:2019-11-13 12:28:27

标签: javascript for-loop ecmascript-6

在我的主页上,我有一个forEach循环,该循环显示了业务模式下来自不同业务的促销。在我的index.js控制器中,我定义了如下促销(随机播放是随机排序,但此处不相关):

let promotions = [];
businesses.forEach(business => {
    promotions = promotions.concat(business.promotions);
});
shuffleArray(promotions);

在我的主页上,促销显示如下:

<div class="gold">
  <% promotions.forEach(function(promotion) { %>
    <img class='lazy business-advert-image' data-src="<%- cloudinary.url(promotion.public_id, {width: 450, height: 300, crop: 'pad', quality: 'auto', fetch_format: 'auto', flags: 'lossy'}) %>" alt="Business Advertising Promotion">
  <% }); %>
</div> 

这工作得很好,尽管除此之外,我还尝试覆盖促销活动的公司名称(这是一对多关系,即一个业务可能有5个不同的促销活动)。但是,我在为如何从业务模型访问其他字段而苦苦挣扎。我尝试过:

promotion.business.name
business.name

这两个都给出“未定义业务”错误;并且:

business.promotion.name

给出未定义的错误。

任何人都可以建议我如何访问名称(或“商业模式”中的其他字段)吗?谢谢

2 个答案:

答案 0 :(得分:1)

如果是我,我将在您的控制器中进行繁重的工作,并避免在视图层中使用嵌套循环。

因此控制器方法将具有:

let promotions = [];
businesses.forEach(business => {
    let businessPromotions = business.promotions.map(promotion => {
        promotion.businessName = business.name;
        return promotion;
    })
  promotions = promotions.concat(businessPromotions);
});

然后在视图中,您可以通过<%= promotion.businessName %>(在Promotions forEach循环中)访问商户名称

答案 1 :(得分:0)

首先,您还需要从服务器发送公司名称。您现在只是阵列中的促销活动。     促销= Promotions.concat(business.promotions); 在上面的行中将数据添加到这样的数组中

array=[
promotionArray1[5],
promotionArray2[5]
]

此结构没有公司名称。它只有促销。因此,您需要像这样更改它 这应该是这样的

promotions = promotions.concat(business);

这意味着这个时间数组将是这样

array=[
business1.promotionArray1[5],
business2.promotionArray2[5]
]

现在在ejs中,您需要放置嵌套循环才能访问所有数据。

<div class="gold">
<% promotions.forEach(function(business) { %>
<% business.forEach(function(promotion1) { %>
 put your html here.
 business.name
 promotion1.name
 <% }); %>
<% }); %>
</div> 
相关问题