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

我有这个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,

});


慕村9548890
浏览 163回答 2
2回答

桃花长相依

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});

RISEBY

  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.lengthObject.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;        }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript