【问题标题】:Can't add a new key to object inside an array无法向数组内的对象添加新键
【发布时间】:2021-03-09 08:16:46
【问题描述】:

我是 TypeScript 的新手

const conversations = await Conversation
                .query()
                .whereRaw("FIND_IN_SET(" + user_id + ", participants)")
                .orderBy("last_message_timestamp", "desc")
                .limit(10)
                .offset(a)
    
    var conversations_array: any = [];
    
    for (var i = 0; i < conversations.length; i++) {
    conversations_array.push(conversations[i]);
    }
    
    for (var i = 0; i < conversations.length; i++) {
    conversations_array[i].last_message = "Test";
    }
    
    return conversations_array

它从 Lucid(Adonis JS 数据库 ORM)获取数据并将这些数据推送到一个名为 conversations_array 的数组中。

然后我向名为“last_message”的对象数组添加另一个键

问题是,当我从 API 返回该对话数组时,我只能看到数据库字段,而看不到“last_message”键。如何返回包括“last_message”在内的整个对话数组?

例如我可以看到这个

return conversations_array[0].last_message

【问题讨论】:

    标签: typescript adonis.js lucid


    【解决方案1】:

    您的 Conversation 模型应该有一个 last_message 属性,例如(如果您使用的是 Typescript):

    @column()
    public lastMessage: number;
    

    如果你不想保留这个属性(或者这个属性在数据库表中不存在),你可以根据选择的列来填充你的模型对象:

    在您的模型中:

    public static get columns() {
        return [
            ...
            all previous columns without lastMessage (comma separated)
            ...
        ]
    }
    

    我个人根据我的列数组构建了一个函数来填充它:

    export function getFieldsToUpdate(requestFields: any, fieldNames: string[]) {
      let fieldsToUpdate = {};
    
      fieldNames.forEach((fieldName) => {
        if (fieldName in requestFields)
          fieldsToUpdate[fieldName] = requestFields[fieldName];
      });
      return fieldsToUpdate;
    }
    

    然后在我将使用的控制器中:

    conversation.fill(getFieldsToUpdate(request.all(), Conversation.columns));
    

    这样我可以在没有 last_message 属性的情况下填充对象

    【讨论】:

      猜你喜欢
      • 2016-06-25
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 2013-09-28
      • 2021-07-01
      • 1970-01-01
      相关资源
      最近更新 更多