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

基于嵌套键值计算对象

基于嵌套键值计算对象

慕慕森 2021-08-20 18:34:59
我有这个嵌套的json,我想搜索一个值,然后返回找到该值的整个对象并计算这些对象并使用映射和过滤器重新创建对象。我不知道该怎么做,因为我是编程新手。在示例 json 中,我想搜索水果的值,然后计算所有带有日期的水果值的对象总数。示例 Json 对象:var sampleData = [ {   fruitData: {     fruit: 'apple',     price: 23   },   dateCreated: '2019-07-23T00:20:36.535Z' }, {   fruitData: {     fruit: 'apple',     price: 36    },   dateCreated: '2019-07-23T00:30:32.135Z' }, {   fruitData: {     fruit: 'apple',     price: 36    },   dateCreated: '2019-07-24T00:10:36.115Z' }, {   fruitData: {     fruit: 'mango',     price: 40    },   dateCreated: '2019-07-24T01:25:32.835Z' },]我希望输出是这样的,并在搜索水果的价值后进行计数var filteredData= [ {   '07-23-2019': {       'apple': 2   },   '07-24-2019': {       'apple': 1,       'mango': 1   } }]感谢那些愿意提供帮助的人
查看完整描述

2 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

假设JSON是结构化的,我们可以得到fruits的值:


function fruitCount(sampleData) {

    var results = {};


    // sampleData is a list, so for each item

    sampleData.forEach((container) => {


        // Get the relevant data from the subfields.

        let date = container.dateCreated;

        let fruit = container.fruitData.fruit;


        // If the date has been found before, we'll reuse it.

        // If the fruit has been found before, we'll increment it.

        // If the fruit has NOT been found before, we'll insert it with a

        //     value of 1.

        if (date in results) {

            results[date][fruit] = results[date][fruit] + 1 || 1;


        // The date has not been found before, so create it.

        } else {

            results[date] = {fruit: 1};

        }

    });


    return results;

}

if (date in results) {

    results[date][fruit] = results[date][fruit] + 1 || 1;

相当于


if (date in results) {

    if (fruit in results[date]) {

        results[date][fruit]++;

    } else {

        results[date][fruit] = 1;

    }

}


查看完整回答
反对 回复 2021-08-20
?
慕森卡

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

const sampleData = [

    {

        fruitData: {

            fruit: 'apple',

            price: 23

        },

        dateCreated: '07-23-2019'

    },

    {

        fruitData: {

            fruit: 'apple',

            price: 36

        },

        dateCreated: '07-23-2019'

    },

    {

        fruitData: {

            fruit: 'mango',

            price: 40

        },

        dateCreated: '07-23-2019'

    },

];



function groupData(data, key) {

    const objs = {};

    for (const obj of data) {

        objs[obj[key].fruit] = (objs[obj[key].fruit] || 0) + 1;

    }

    return objs;

}


const data = groupData(sampleData, 'fruitData');

如果您希望数据为数组,则将最后一行更改为此


const data = [groupData(sampleData, 'fruitData')];


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

添加回答

举报

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