为了账号安全,请及时绑定邮箱和手机立即绑定

更新json以显示json数组中的对象数,而不是Node应用程序中的列表

更新json以显示json数组中的对象数,而不是Node应用程序中的列表

慕村9548890 2021-05-16 16:30:05
我有这个json结构:    {        "sales_rep": {            "1": {                "id": 1,                "name": "Joe",                "email": "joebloggs@email.com",                "customers": [                    {                        "id": 1,                        "address": "1 High Street",                        "name": "CUSTOMER1",                        "supplierId": 1,                    },                    {                        "id": 2,                        "address": "2 High Street",                        "name": "CUSTOMER2",                        "supplierId": 1,                    },                    {                        "id": 3,                        "address": "3 High Street",                        "name": "CUSTOMER3",                        "supplierId": 1                    },                ]            }        }    }是否可以编写一个功能来提供客户数量而不是客户详细信息?我期待最终得到这样的结果:    {        "sales_rep": {            "1": {                "id": 1,                "name": "Joe",                "email": "joebloggs@email.com",                "customers": "3"            }        }    }我想我需要某种缩减功能,但是我不确定该怎么做。我遇到的主要问题之一是原始json是使用此Sequelize模型生成的:let users = db.SalesRep.findAll({  attributes: ['id', 'name', 'email'],  include: [{    model: db.Customers,    as: 'customers',  }],  where: {'id': "1"},  order: orderClause,  offset,  limit,});
查看完整描述

2 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

findAll()是一个异步函数,它返回一个Promise。您需要使用.then()来获得结果并在那里执行转换。


db.SalesRep.findAll({

  attributes: ['id', 'name', 'email'],

  include: [{

    model: db.Customers,

    as: 'customers',

  }],

  where: {'id': "1"},

  order: orderClause,

  offset,

  limit,

}).then(function(users) {

    let sales_rep = users.sales_rep;

    for (let key in sales_rep) {

        sales_rep[key].customers = sales_rep[key].customers.length;

    }

    // do more stuff with users

});


查看完整回答
反对 回复 2021-05-27
?
RISEBY

TA贡献1856条经验 获得超5个赞

  let data = {

        "sales_rep": {

            "1": {

                "id": 1,

                "name": "Joe",

                "email": "joebloggs@email.com",

                "customers": [

                    {

                        "id": 1,

                        "address": "1 High Street",

                        "name": "CUSTOMER1",

                        "supplierId": 1,

                    },

                    {

                        "id": 2,

                        "address": "2 High Street",

                        "name": "CUSTOMER2",

                        "supplierId": 1,

                    },

                    {

                        "id": 3,

                        "address": "3 High Street",

                        "name": "CUSTOMER3",

                        "supplierId": 1

                    },

                ]

            }

        }

    }


let customerCount = data.sales_rep['1'].customers.length

Object.assign(data.sales_rep['1'], { customers: customerCount})

console.log(data)

db.SalesRep.findAll方法是重现承诺,因此您可以await用来获取结果


   let users = await db.SalesRep.findAll({

      attributes: ['id', 'name', 'email'],

      include: [{

        model: db.Customers,

        as: 'customers',

      }],

      where: {'id': "1"},

      order: orderClause,

      offset,

      limit,

    })

        let sales_rep = users.sales_rep;

        for (let key in sales_rep) {

            sales_rep[key].customers = sales_rep[key].customers.length;

        }


查看完整回答
反对 回复 2021-05-27
  • 2 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信