【问题标题】:Return the values of an object inside of array返回数组内对象的值
【发布时间】:2020-03-24 06:16:29
【问题描述】:

我正在尝试返回数组内的对象的值。

const bugSchema = new Schema({
title: {
    type: String,
    required: true
},
 comments:[
    {
        user:{
            type: String,
            required: true
        },
        content: {
            type: String,
            required: true
        }
    }
]

});

我尝试了以下函数,但它没有返回任何内容。

    <% for (bug of bugs) { %>
                        <ion-card>
                            <ion-card-header>
                                <ion-card-title><%= bug.comments.filter(function (value) { value.content }) %></ion-card-title>

                            </ion-card-header>
                            <ion-card-content>

                            </ion-card-content>
                        </ion-card>

                    <% } %>

但是我可以返回一个数组,但它返回整个对象而不是每个对象的值。

          <% for (bug of bugs) { %>
                        <ion-card>
                            <ion-card-header>
                                <ion-card-title><%= bug.comments %></ion-card-title>

                            </ion-card-header>
                            <ion-card-content>

                            </ion-card-content>
                        </ion-card>

                    <% } %>

下面的截图显示了对象的样子

我期望实现的是创建一个 ion-card 填充评论的内容。

【问题讨论】:

  • 你能分享示例错误对象吗?

标签: javascript node.js ionic-framework ejs


【解决方案1】:

我认为这会奏效:

<% for (bug of bugs) { %>
  <% for (comment of bug.comments) { %>
    <ion-card>
      <ion-card-header>
        <ion-card-title>
          <%= comment.user %>
        </ion-card-title>
      </ion-card-header>
      <ion-card-content>
        <%= comment.content %>
      </ion-card-content>
    </ion-card>
  <% } %>
<% } %>

【讨论】:

    【解决方案2】:
    <% bugs.forEach(function(elem) { %>
        <ion-card>
            <ion-card-header>
                <ion-card-title><%= elem.content %></ion-card-title>
    
            </ion-card-header>
            <ion-card-content>
    
            </ion-card-content>
        </ion-card>
    <% }) %>
    

    这应该可以,我还没有测试过。请记住,Array.filter 返回一个包含通过条件的元素的数组。如果要迭代所有元素,请执行 Array.forEach。

    编辑

    工作示例:

    const ejs = require("ejs");
    
    let post = {
        _id: 123,
        title: "Comments",
        description: "...",
        date: "...",
        time: 15.2,
        assignedTo: "Elon Musk",
        status: "open",
        comments: [
            {
                user: "Elon",
                content: "Test1"
            },
            {
                user: "Elon2",
                content: "Test2"
            }
        ]
    };
    
    let render = ejs.render(
        "<% bugs.forEach(function(elem) { %><ion-card><ion-card-header><ion-card-title><%= elem.content %></ion-card-title></ion-card-header><ion-card-content></ion-card-content></ion-card><% }) %>",
        { bugs: post.comments }
    );
    
    console.log(render);
    
    //render -> <ion-card><ion-card-header><ion-card-title>Test1</ion-card-title></ion-card-header><ion-card-content></ion-card-content></ion-card><ion-card><ion-card-header><ion-card-title>Test2</ion-card-title></ion-card-header><ion-card-content></ion-card-content></ion-card>
    

    bugs 应该是 post.cmets

    【讨论】:

    • 其实没有。返回错误“Cannot read property "for Each" of undefined"
    • @HalfMartianHalfHuman 你如何填充变量“bugs”?它应该是一个 cmets 数组。
    • 我发布了一个示例错误对象,其中填充了 cmets 和对象架构。你可以去看看
    • @HalfMartianHalfHuman 提供了工作示例。但是,您命名变量(我将其命名为“bugs”)应该指向 post.cmets / 您的对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 2021-04-09
    相关资源
    最近更新 更多