基于嵌套键值计算对象

我有这个嵌套的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

   }

 }

]


感谢那些愿意提供帮助的人


慕慕森
浏览 141回答 2
2回答

慕哥6287543

假设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;    }}

慕森卡

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

相关分类

JavaScript