javascript中对象的微积分

我有一个包含 2 个字段的对象:day_active和day_inactive. (该对象在下面的 javascript 片段中)


而我想要获得的是另一个基于这个公式的对象:


count(day_active (在日期 x))-count(day_inactive (在日期 x)


{

    {

        "date" : "2019-09-19",

        "type" : "groupC",

        "count" : 2.0 // (5.0 - 3.0) - how many groupC were on day_active(2019-09-19) minus how many groupC were on day_inactive(2019-09-19) 

    },

    {

        "date" : "2019-09-19",

        "type" : "groupW",

        "count" : -2.0 // (3.0 - 5.0)

    },

    {

        "date" : "2019-09-11",

        "type" : "groupW",

        "count" : -2.0 // (8.0 - 10.0)

    },

    {

        "date" : "2019-10-08",

        "type" : "groupW",

        "count" : 7.0 // (7.0 - 0.0)

    }

}

我试过这段代码,但没有考虑所有情况,结果不完整:


let items = {

    "day_inactive" : [ 

        {

            "date" : "2019-09-19",

            "type" : "groupC",

            "count" : 3.0

        }, 

        {

            "date" : "2019-09-11",

            "type" : "groupW",

            "count" : 10.0

        }, 

        {

            "date" : "2019-09-19",

            "type" : "groupW",

            "count" : 5.0

        },

        {

            "date" : "2019-10-07",

            "type" : "groupW",

            "count" : 9.0

        },

        {

            "date" : "2019-10-05",

            "type" : "groupW",

            "count" : 3.0

        },

    ],

    "day_active" : [ 

        {

            "date" : "2019-09-11",

            "type" : "groupW",

            "count" : 8.0

        },

        {

            "date" : "2019-09-19",

            "type" : "groupW",

            "count" : 3.0

        },

        {

            "date" : "2019-10-08",

            "type" : "groupW",

            "count" : 7.0

        }, 

        {

            "date" : "2019-09-19",

            "type" : "groupC",

            "count" : 5.0

        }

    ]

}


我怎样才能以简单的方式解决这个问题?感谢您的时间!


紫衣仙女
浏览 354回答 2
2回答

炎炎设计

按照评论进行解释......// let's create an empty objectlet output = {};// and start copying active days...for (const obj of items.day_active) {    // the following `key` is just for grouping purposes...    const key = `${obj.date}-${obj.type}`;    output[key] = { ...obj };}// Now let's look at inactive days...for (const obj of items.day_inactive) {    // the following `key` is just for grouping purposes...    const key = `${obj.date}-${obj.type}`;    // is this the first time we're looking at this `date-type`? let's add it with 0 count    if (!output[key]) {        output[key] = { ...obj, count: 0 };    }    // and subtract it from active days count    output[key].count -= obj.count;}// let's remove the `key` we created earlier...output = Object.values(output);// here's the outputconsole.log(output);从给定的样本输入中,这是我们得到的结果:[ { date: '2019-10-11', type: 'groupW', count: -2 },  { date: '2019-10-19', type: 'groupW', count: 3 },  { date: '2019-10-08', type: 'groupW', count: 7 },  { date: '2019-10-19', type: 'groupC', count: 5 },  { date: '2019-09-19', type: 'groupC', count: -3 },  { date: '2019-09-19', type: 'groupW', count: -5 },  { date: '2019-10-07', type: 'groupW', count: -9 },  { date: '2019-10-05', type: 'groupW', count: -3 } ]

qq_遁去的一_1

我认为这个会更有效率,我以我的名字命名了这个对象,因为...idn        let marios = {};            items.day_active.forEach(d => marios[d.date+'_'+d.type] = d.count || 0);        items.day_inactive.forEach(d => marios[d.date+'_'+d.type] =  marios[d.date+'_'+d.type] ? marios[d.date+'_'+d.type] - (d.count || 0) : (d.count || 0));        console.log(marios);其背后的逻辑是,我们创建一个对象,并为数据集中的每个日期创建一个属性,从formla 的第一项开始,以第二部分的减法结束,并且默认为每个合适的日期为0案件。最后,您可以迭代对象的属性,在 '_' 上拆分字符串以读取每个属性的日期和组并创建结果数组(如果您遇到问题,请告诉我)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript