Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.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_Json - Fatal编程技术网

Javascript 按键分组JSON

Javascript 按键分组JSON,javascript,json,Javascript,Json,我将JSON数据结构化如下: [ { "Month": "Jan" "Year": 2015, "Count": 15 }, { "Month": "Feb" "Year": 2015, "Count": 5 }, { "Month": "Jan" "Year": 2016, "Count": 25 },

我将JSON数据结构化如下:

[
    {
        "Month": "Jan"
        "Year": 2015,
        "Count": 15
    },
    {
        "Month": "Feb"
        "Year": 2015,
        "Count": 5
    },
    {
        "Month": "Jan"
        "Year": 2016,
        "Count": 25
    },
        {
        "Month": "Feb"
        "Year": 2016,
        "Count": 50
    }
]
我想使用JavaScript对数据进行分组,以获得以下输出。有人能帮我吗

[
    {
        "Month": "Jan"
        "Count_2015": 15,
        "Count_2016": 25
    },
    {
        "Month": "Feb"
        "Count_2015": 5,
        "Count_2016": 50
    }
]
您可以使用
forEach()
循环并使用一个对象作为
thisArg
param

var数据=[{“月”:“一月”,“年”:2015,“月”:“月”:“二月”,“年”:2015,“月”:“月”:“月”:“一月”,“年”:2016,“计数”:25},{“月”:“二月”,“年”:2016,“计数”:50}]
var结果=[]
data.forEach(函数(e,i){
如果(!本[e.月]){
这个月{
月份:e.月份,
[计数+e.年]:e.计数
}
结果。推送(本[e.月])
}否则{
这个[东月]['Count_'+e年]=e.计数
}
}, {})
console.log(结果)
var月=[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”];
var结果=[];
[]forEach.call(月,函数(月){
var monthObj={“月”:月};
结果:推(monthObj);
});
让我,年,凯斯特
对于(变量i=0;i

试试看

看看这个问题。这可能会有帮助,请参阅。在JSON上迭代,并在测试条件时将其全部添加到新的JSON对象中。显然,您必须从该值创建键,这将需要一点递归。请发布您尝试过的内容,然后询问为什么它不工作。StackOverflow不是免费的代码编写服务。你可以研究很多其他类似的问题,至少可以找到一个起点。然后,当您遇到真正的代码问题时,提出问题,然后感谢Nenad。我会试试的。对不起,各位。我对这一点比较陌生,我会确保下次我面对问题时,我会正确地回答问题,并对我尝试过的内容和我面临的问题给予更清晰的解释。很好的解决方案-我更喜欢你的答案。但你不需要i参数,这是多余的。在我的版本中,我试图确保在结果集中按时间顺序显示月份,而不是假设每年所有月份都是完整的,所以如果你先处理“Sep”,它将是第一个结果。。。
var months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
var result = [];
[].forEach.call(months, function(month) {
  var monthObj = {"Month": month};
  result.push(monthObj);
});
let mi, year, keystr
for (var i=0; i< data.length; i++) {
  var obj = data[i];
  for (var key in obj) {
    if (!obj.hasOwnProperty(key)) continue;
    var value = obj[key];
    switch (key) {
      case "Month":
        mi = months.indexOf(value);
        break;
      case "Year":
        year = value;
        break;
      case "Count":
        keystr = "Count_" + year.toString();
        resObj = result[mi];
        resObj[keystr] = value;
        break;
    }
  }
}
console.log(result);