Javascript Jquery-计算JSON对象
我在一个图表系统上工作,我从一个ajax json响应中获取数据。我只是想计算某些JSON对象并将它们分组 例如,我尝试在每个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
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正确回答你的问题,请接受。