Javascript 基于嵌套键值的对象计数

Javascript 基于嵌套键值的对象计数,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,已编辑 我有这个嵌套的json,我想搜索一个值,然后返回找到该值的整个对象,计算这些对象的数量,并使用map和filter重新创建该对象。我不知道该怎么做,因为我是编程新手 在示例json中,我想搜索水果的值,然后用这些水果的值和日期来计算所有对象的总数 示例Json对象: var sampleData = [ { fruitData: { fruit: 'apple', price: 23 }, dateCreated: '2019-07-23T00:2

已编辑 我有这个嵌套的json,我想搜索一个值,然后返回找到该值的整个对象,计算这些对象的数量,并使用map和filter重新创建该对象。我不知道该怎么做,因为我是编程新手

在示例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
   }
 }
]

谢谢你的帮助

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')];

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

函数水果计数(sampleData){
var结果={};
//sampleData是一个列表,因此对于每个项目
sampleData.forEach((容器)=>{
//从子字段中获取相关数据。
让date=container.dateCreated;
让水果=container.fruitData.fruit;
//如果以前找到过日期,我们将重新使用它。
//如果以前发现过这种水果,我们会增加它。
//如果以前没有找到水果,我们会在里面插上
//值为1。
如果(结果中的日期){
结果[日期][结果]=结果[日期][结果]+1 | | 1;
//以前找不到该日期,请创建它。
}否则{
结果[日期]={结果:1};
}
});
返回结果;
}
if(结果中的日期){
结果[日期][结果]=结果[日期][结果]+1 | | 1;
相当于

if(结果中的日期){
如果(结果[日期]){
结果[日期][结果]++;
}否则{
结果[日期][结果]=1;
}
}

数据是否始终采用这种格式?是的,它将始终采用这种格式Hi Jamal,这也可以。感谢您提供另一种解决方案。但这可以通过使用array.filter()和array.map()实现吗?我想投票,但我不能,因为我的声誉低于15。很抱歉,我更改了输出。请参阅我编辑的主题的示例,我忘记了日期也应该包括在内。谢谢Michael,这也很有效。感谢提供另一种解决方案。但这可以使用array.filter()和array.map()实现吗?我想投票,但我不能,因为我的声誉低于15。很抱歉,我更改了输出查看我编辑的主题上的示例,我忘记了日期也应该包括在内。谢谢,最后一件事,你能向我解释代码的每一行吗?在代码中使用注释将对我有很大帮助。