Javascript Jquery-计算JSON对象

Javascript Jquery-计算JSON对象,javascript,jquery,json,highcharts,Javascript,Jquery,Json,Highcharts,我在一个图表系统上工作,我从一个ajax json响应中获取数据。我只是想计算某些JSON对象并将它们分组 例如,我尝试在每个JSON对象上循环,并将所有颜色(红色、蓝色、黄色)分成若干组,在这些组中,我希望将结果按月划分。然后,我可以获取结果并将其放入图表中 我当前收到错误信息: Cannot set property '2016-10' of undefined 这是一个我试图完成的例子 以下是导致我出现问题的代码: var dateCounts_Red = {}; var dateCou

我在一个图表系统上工作,我从一个ajax json响应中获取数据。我只是想计算某些JSON对象并将它们分组

例如,我尝试在每个JSON对象上循环,并将所有颜色(红色、蓝色、黄色)分成若干组,在这些组中,我希望将结果按月划分。然后,我可以获取结果并将其放入图表中

我当前收到错误信息:

Cannot set property '2016-10' of undefined
这是一个我试图完成的例子

以下是导致我出现问题的代码:

var dateCounts_Red = {};
var dateCounts_Blue = {};
var dateCounts_Yellow = {};

data.d.results.forEach(function(element) {
  var date = element.created_date.slice(0, 7);
  var yr = date.slice(0, 4);
  var Color = element.colorvalue;

  if (Color === "Red") {
      if (!dateCounts_Red.hasOwnProperty(yr)) {
        dateCounts_Red[yr] = {}
      }
      if (!dateCounts_Red[yr].hasOwnProperty(date)) { 
        dateCounts_Red[yr][date] = 0
      }
      dateCounts_Red[yr][date]++;
  }else {dateCounts_Red[yr][date] = 0}

  if (Color === "Blue") {
      if (!dateCounts_Blue.hasOwnProperty(yr)) {
        dateCounts_Blue[yr] = {}
      }
      if (!dateCounts_Blue[yr].hasOwnProperty(date)) {
        dateCounts_Blue[yr][date] = 0
      }
      dateCounts_Blue[yr][date]++;
  }else {dateCounts_Blue[yr][date] = 0}

  if (Color === "Yellow") {
      if (!dateCounts_Yellow.hasOwnProperty(yr)) {
        dateCounts_Yellow[yr] = {}
      }
      if (!dateCounts_Yellow[yr].hasOwnProperty(date)) {
        dateCounts_Yellow[yr][date] = 0
      }
      dateCounts_Yellow[yr][date]++;
  }else {dateCounts_Yellow[yr][date] = 0}     

});

Red_yr_2015_data = [dateCounts_Red['2015']['2015-01'],dateCounts_Red['2015']['2015-02'],dateCounts_Red['2015']['2015-03'],dateCounts_Red['2015']['2015-04'],dateCounts_Red['2015']['2015-05'],dateCounts_Red['2015']['2015-06'],dateCounts_Red['2015']['2015-07'],dateCounts_Red['2015']['2015-08'],dateCounts_Red['2015']['2015-09'],dateCounts_Red['2015']['2015-10'],dateCounts_Red['2015']['2015-11'],dateCounts_Red['2015']['2015-12']]; 

Blue_yr_2015_data = [dateCounts_Blue['2015']['2015-01'],dateCounts_Blue['2015']['2015-02'],dateCounts_Blue['2015']['2015-03'],dateCounts_Blue['2015']['2015-04'],dateCounts_Blue['2015']['2015-05'],dateCounts_Blue['2015']['2015-06'],dateCounts_Blue['2015']['2015-07'],dateCounts_Blue['2015']['2015-08'],dateCounts_Blue['2015']['2015-09'],dateCounts_Blue['2015']['2015-10'],dateCounts_Blue['2015']['2015-11'],dateCounts_Blue['2015']['2015-12']]; 

Yellow_yr_2015_data = [dateCounts_Yellow['2015']['2015-01'],dateCounts_Yellow['2015']['2015-02'],dateCounts_Yellow['2015']['2015-03'],dateCounts_Yellow['2015']['2015-04'],dateCounts_Yellow['2015']['2015-05'],dateCounts_Yellow['2015']['2015-06'],dateCounts_Yellow['2015']['2015-07'],dateCounts_Yellow['2015']['2015-08'],dateCounts_Yellow['2015']['2015-09'],dateCounts_Yellow['2015']['2015-10'],dateCounts_Yellow['2015']['2015-11'],dateCounts_Yellow['2015']['2015-12']]; 


Red_yr_2016_data = [dateCounts_Red['2016']['2016-01'],dateCounts_Red['2016']['2016-02'],dateCounts_Red['2016']['2016-03'],dateCounts_Red['2016']['2016-04'],dateCounts_Red['2016']['2016-05'],dateCounts_Red['2016']['2016-06'],dateCounts_Red['2016']['2016-07'],dateCounts_Red['2016']['2016-08'],dateCounts_Red['2016']['2016-09'],dateCounts_Red['2016']['2016-10'],dateCounts_Red['2016']['2016-11'],dateCounts_Red['2016']['2016-12']]; 

Blue_yr_2016_data = [dateCounts_Blue['2016']['2016-01'],dateCounts_Blue['2016']['2016-02'],dateCounts_Blue['2016']['2016-03'],dateCounts_Blue['2016']['2016-04'],dateCounts_Blue['2016']['2016-05'],dateCounts_Blue['2016']['2016-06'],dateCounts_Blue['2016']['2016-07'],dateCounts_Blue['2016']['2016-08'],dateCounts_Blue['2016']['2016-09'],dateCounts_Blue['2016']['2016-10'],dateCounts_Blue['2016']['2016-11'],dateCounts_Blue['2016']['2016-12']]; 

Yellow_yr_2016_data = [dateCounts_Yellow['2016']['2016-01'],dateCounts_Yellow['2016']['2016-02'],dateCounts_Yellow['2016']['2016-03'],dateCounts_Yellow['2016']['2016-04'],dateCounts_Yellow['2016']['2016-05'],dateCounts_Yellow['2016']['2016-06'],dateCounts_Yellow['2016']['2016-07'],dateCounts_Yellow['2016']['2016-08'],dateCounts_Yellow['2016']['2016-09'],dateCounts_Yellow['2016']['2016-10'],dateCounts_Yellow['2016']['2016-11'],dateCounts_Yellow['2016']['2016-12']]; 

我知道代码目前非常笨拙,但有谁知道更好的解决方法吗?

与其重新发明轮子,不如试着用这种方式来解决这个问题:

按对象的属性对对象进行分组是一项常见任务。有许多库可以帮助实现这一点

groupBy(来自下划线网站的文档)

将集合拆分为多个集合,并根据运行每个集合的结果进行分组 通过iteratee获取值。如果iteratee是字符串而不是函数, 根据iteratee指定的属性对每个值进行分组


与其重新发明轮子,不如试着用这种方式来解决问题:

按对象的属性对对象进行分组是一项常见任务。有许多库可以帮助实现这一点

groupBy(来自下划线网站的文档)

将集合拆分为多个集合,并根据运行每个集合的结果进行分组 通过iteratee获取值。如果iteratee是字符串而不是函数, 根据iteratee指定的属性对每个值进行分组


它失败,因为如果颜色不是红色,它将转到else并尝试设置对象,但对象未创建

if (Color === "Red") {
      if (!dateCounts_Red.hasOwnProperty(yr)) {  <-- you create it here
        dateCounts_Red[yr] = {}
      }
      if (!dateCounts_Red[yr].hasOwnProperty(date)) { 
        dateCounts_Red[yr][date] = 0
      }
      dateCounts_Red[yr][date]++;
  }else {dateCounts_Red[yr][date] = 0}  <-- it needed to be set here too...
if(颜色==“红色”){

如果(!dateCounts_Red.hasOwnProperty(yr)){失败,因为如果颜色不是红色,它将转到else并尝试设置对象,但对象未创建

if (Color === "Red") {
      if (!dateCounts_Red.hasOwnProperty(yr)) {  <-- you create it here
        dateCounts_Red[yr] = {}
      }
      if (!dateCounts_Red[yr].hasOwnProperty(date)) { 
        dateCounts_Red[yr][date] = 0
      }
      dateCounts_Red[yr][date]++;
  }else {dateCounts_Red[yr][date] = 0}  <-- it needed to be set here too...
if(颜色==“红色”){

如果(!dateCounts_Red.hasOwnProperty(yr)){如果您想要简单的方法

if (Color === "Red") {
      if (!dateCounts_Red.hasOwnProperty(yr)) {  <-- you create it here
    dateCounts_Red[yr] = {}
      }
      if (!dateCounts_Red[yr].hasOwnProperty(date)) { 
    dateCounts_Red[yr][date] = 0
      }
      dateCounts_Red[yr][date]++;
  }else {dateCounts_Red[yr]={date:0}}  // set your object here, too
if(颜色==“红色”){

如果(!dateCounts_Red.hasOwnProperty(yr)){如果您想要简单的方法

if (Color === "Red") {
      if (!dateCounts_Red.hasOwnProperty(yr)) {  <-- you create it here
    dateCounts_Red[yr] = {}
      }
      if (!dateCounts_Red[yr].hasOwnProperty(date)) { 
    dateCounts_Red[yr][date] = 0
      }
      dateCounts_Red[yr][date]++;
  }else {dateCounts_Red[yr]={date:0}}  // set your object here, too
if(颜色==“红色”){

如果(!dateCounts_Red.hasOwnProperty(yr)){将有助于显示示例输入和有问题的预期结果。请查看中的groupBy函数。我认为它至少可以为您做一些工作。如果我理解您的问题,“更好的方法”这绝对是您所需要的。这将有助于显示示例输入和预期结果。请查看中的groupBy函数。我认为它至少可以为您做一些工作。如果我理解您的问题,“更好的方法”绝对是您所需要的。我尝试了一下,但现在我得到了“Uncaught TypeError:无法读取未定义的属性'2015-01',因为2015不包含黄色或蓝色。我将再次思考此问题。以下是我到目前为止得到的结果:我尝试了一下,但现在我得到了“Uncaught TypeError:无法读取未定义的属性'2015-01'"因为2015不包含黄色或蓝色。我会重新思考这个问题。这是我到目前为止得到的结果:这很有趣,以前从未使用下划线,但我会研究一下。谢谢。如果这是你问题的正确答案,请接受。这很有趣,以前从未使用下划线,但我会研究一下。谢谢。如果这是c正确回答你的问题,请接受。