Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript将每个子节点的值汇总到JSON中的父节点?_Javascript_Angularjs_Json - Fatal编程技术网

如何使用javascript将每个子节点的值汇总到JSON中的父节点?

如何使用javascript将每个子节点的值汇总到JSON中的父节点?,javascript,angularjs,json,Javascript,Angularjs,Json,我从服务器接收到一个结构流畅的JSON。哪个是章节在根目录下有一个阶段和/或审查集。如果一个阶段确实存在,那么将有一个对象数组或另一个阶段。查看集包含两个保存数据的属性 下面是示例JSON { "id": "chapter", "chapterName": "Example Chapter", "stages": [ { "id": "stage", "stages": [

我从服务器接收到一个结构流畅的JSON。哪个是章节在根目录下有一个阶段和/或审查集。如果一个阶段确实存在,那么将有一个对象数组或另一个阶段。查看集包含两个保存数据的属性

下面是示例JSON

    {
    "id": "chapter",
    "chapterName": "Example Chapter",
    "stages": [
        {
            "id": "stage",
            "stages": [
                {
                    "id": "stage",
                    "stages": [],
                    "reviewSets": [
                        {
                            "id":"reviewset-1",
                            "yettoanswer": 2,
                            "answered": 4
                        }
                    ],
                }
            ],
            "reviewSets": [
                {
                    "id": "reviewset-2",
                    "yettoanswer": 3,
                    "answered": 5
                },
                {
                    "id": "rewviewset-3",
                    "yettoanswer": 6,
                    "answered": 0
                }
            ]
        },
        {
            "id": "stage",            
            "stages": [
                {
                    "id": "stage",
                    "stages": [],
                    "reviewSets": [
                        {
                            "id": "reviewset-4",
                            "yettoanswer": 0,
                            "answered": 8
                        },
                        {
                            "id": "reviewset-5",
                            "yettoanswer": 4,
                            "answered": 4
                        }                        
                    ]
                }
            ],
            "reviewSets": [
                {
                    "id": "reviewset-6",
                    "yettoanswer": 1,
                    "answered": 2
                },
                {
                    "id": "reviewset-7",
                    "yettoanswer": 6,
                    "answered": 4
                }
            ]
        }
    ],
    "reviewSets": [
        {
            "id": "reviewset-8",
            "yettoanswer": 0,
            "answered": 2
        },
        {
            "id": "reviewset-9",
            "yettoanswer": 1,
            "answered": 2
        }
    ],
}
请注意,阶段和审阅集是对象数组。它可以是null、一个对象或多个对象

我想得到每个“阶段”和根的“yettoanswer”和“Answeed”的计数。我正在寻找的结果如下:

{
    "id": "chapter",
    "chapterName": "Example Chapter",
    "yettoanswer" : 22,
    "answered" : 31,
    "stages": [
        {
            "id": "stage",
            "yettoanswer" : 11,
            "answered" : 9,
            "stages": [
                {
                    "id": "stage",
                    "yettoanswer" : 2,
                    "answered" : 4,
                    "stages": [],
                    "reviewSets": [
                        {
                            "id":"reviewset-1",
                            "yettoanswer": 2,
                            "answered": 4
                        }
                    ],
                }
            ],
            "reviewSets": [
                {
                    "id": "reviewset-2",
                    "yettoanswer": 3,
                    "answered": 5
                },
                {
                    "id": "rewviewset-3",
                    "yettoanswer": 6,
                    "answered": 0
                }
            ]
        },
        {
            "id": "stage",
            "yettoanswer":11,
            "answered":18,
            "stages": [
                {
                    "id": "stage",
                    "yettoanswer":4,
                    "answered" : 12,
                    "stages": [],
                    "reviewSets": [
                        {
                            "id": "reviewset-4",
                            "yettoanswer": 0,
                            "answered": 8
                        },
                        {
                            "id": "reviewset-5",
                            "yettoanswer": 4,
                            "answered": 4
                        }                        
                    ]
                }
            ],
            "reviewSets": [
                {
                    "id": "reviewset-6",
                    "yettoanswer": 1,
                    "answered": 2
                },
                {
                    "id": "reviewset-7",
                    "yettoanswer": 6,
                    "answered": 4
                }
            ]
        }
    ],
    "reviewSets": [
        {
            "id": "reviewset-8",
            "yettoanswer": 0,
            "answered": 2
        },
        {
            "id": "reviewset-9",
            "yettoanswer": 1,
            "answered": 2
        }
    ],
}

我想用javascript实现上面的功能

正如尼娜在评论中提到的那样,您可能忘记了将
reviewSet
s的
yettoanswer
s计算在根目录中,因为(根据您的逻辑)应该是23,而不是22

var root=JSON.parse({“id”:“chapter”,“chapterName”:“示例章”,“stages”:[{“id”:“stage”,“stages”:[{“id”:“stage”,“stages”:[],“reviews”:[{“id”:“reviews-1”,“yettoanswer”:2,“responsed”:4}]}],“reviews”:[{“id”:“reviews-2”,“yettoanswer”:3,“responsed”:5},{“id”:“rewviewset-3”,“yettoanswer,“回答:0},{id:“stage”,“stages:”[{id:“stage”,“stages:”[],“reviewset:”[{id:“reviewset-4”,“yettoanswer”:0,“responsed”:8},{id:“reviewset-5”,“yettoanswer”:4,“reviewset:”[{id:“reviewset-6”,“yettoanswer:”1,“responsed:“reviewset-7”,“yettoanswer”:6,“responsed”:4},”复习集“:[{id:“复习集-8”,“回答:0”,“回答:2},{id:“复习集-9”,“回答:1”,“回答:2}]}”);
sumAnswers(根);
console.log(root);//`JSON.stringify(root)`如果需要JSON结果
职能部门(阶段){
//将新特性引入当前阶段
stage.yettoanswer=0;
stage.responsed=0;
//总结评论的价值
stage.reviews.forEach(函数(子函数){
stage.yettoanswer+=child.yettoanswer;
stage.answered+=child.answered;
});
//为每个阶段调用此函数,然后
//总结阶段的价值
stage.stages.forEach(函数(子函数){
Sum(儿童);
stage.yettoanswer+=child.yettoanswer;
stage.answered+=child.answered;
});

}
正如尼娜在评论中提到的,您可能忘记了将
reviewSet
s的
yettoanswer
s计算在根目录中,因为(根据您的逻辑)应该是23,而不是22

var root=JSON.parse({“id”:“chapter”,“chapterName”:“示例章”,“stages”:[{“id”:“stage”,“stages”:[{“id”:“stage”,“stages”:[],“reviewset”:[{“id”:“reviewset-1”,“yettoanswer”:2,“responsed”:4}]}],“reviewSets”:[{“id”:“reviewset-2”,“yettoanswer”:3,“responsed”:5},{“id”:“rewviewset-3”,“yettoanswer回答:0},{“id”:“stage”,“stages”:[{“id”:“stage”,“stages”:[],“reviewset”:[{“id”:“reviewset-4”,“yettoanswer”:0,“responsed”:8},{“id”:“reviewset-5”,“yettoanswer”:4,“reviewset”:[{“id”:“reviewset-6”,“yettoanswer”:1,“responsed”:2},{“id”:“reviewset-7”,“yettoanswer”:6,“responsed”:4},”复习集“:[{id:“复习集-8”,“回答:0”,“回答:2},{id:“复习集-9”,“回答:1”,“回答:2}]}”);
sumAnswers(根);
console.log(root);//`JSON.stringify(root)`如果需要JSON结果
职能部门(阶段){
//将新特性引入当前阶段
stage.yettoanswer=0;
stage.responsed=0;
//总结评论的价值
stage.reviews.forEach(函数(子函数){
stage.yettoanswer+=child.yettoanswer;
stage.answered+=child.answered;
});
//为每个阶段调用此函数,然后
//总结阶段的价值
stage.stages.forEach(函数(子函数){
Sum(儿童);
stage.yettoanswer+=child.yettoanswer;
stage.answered+=child.answered;
});

}
您可以迭代相关键并构建子级别的总和。将属性分配给实际级别

var object={id:“chapter”,chapterName:“示例chapter”,stages:[{id:“stage”,stages:[{id:“stage”,stages:[],reviewset:[{id:“reviewset-1”,yettoanswer:2,reswered:4},}],reviewset:[{id:“reviewset-2”,yettoanswer:3,reswered:5},{id:“rewviewset-3”,yettoanswer:6,reswered:0},{id:“stages阶段,阶段:[],复习集:[{id:“复习集-4”,回答:0,回答:8},{id:“复习集-5”,回答:4,回答:4}],复习集:[{id:“复习集-6”,回答:1,回答:2},{id:“复习集-7”,回答:6,回答:4}],复习集:[{id:“复习集-8”,回答:0,回答:2},{id:“复习集-9“,Yetto回答:1,回答:2}]};
[对象].reduce(函数和(r,o){
var v=['stages','reviewSets'].reduce(函数(r,k){
返回(o[k]| |[])。减少(总和,r);
},{yettoanswer:0,reswered:0});
Object.keys(r).forEach(函数(k){
o[k]=(o[k]| | 0)+v[k];
r[k]+=o[k];
});
返回r;
},{yettoanswer:0,Answer:0})
console.log(对象)

.as console wrapper{max height:100%!important;top:0;}
您可以迭代相关键并构建子级别的总和。将属性指定给实际级别

var object={id:“chapter”,chapterName:“示例chapter”,stages:[{id:“stage”,stages:[{id:“stage”,stages:[],reviewset:[{id:“reviewset-1”,yettoanswer:2,reswered:4},}],reviewset:[{id:“reviewset-2”,yettoanswer:3,reswered:5},{id:“rewviewset-3”,yettoanswer:6,reswered:0},{id:“stages“阶段”,阶段:[],复习集:[{id:“复习集-4”,回答:0,回答:8},{id:“复习集-5”,回答:4,回答