当我这样做时,我得到一个数组,存储数据按日期的月份和日期分组,而不是按年份(我这样做是为了获得每天有数据的最大值,最小值和平均值对)
问题是数组在日期内存储了2-3个值的数组,这是关键值。这2-3个索引每个都有一个长度为1的数组,它包含对象的引用,该对象具有我需要的实际数据点(级别)。该对象包含三个属性,date,id(始终为null)和level为float。
我要么找到一种方法,这样2-3个索引直接保存对象,或找到_.each可以访问该级别的方式。
有什么想法吗?
var groupedData = _.groupBy(data, "date");
var groupedLevels = _.groupBy(groupedData, function (points, date) {
var dateParsed = parseDate(date);
var month = dateParsed.getMonth();
var day = dateParsed.getDate();
var monthDay = month + "-" + day;
return monthDay;
});
_.each(groupedLevels, function (points, date) {
var levels = _.map(_.pluck(points, "level"), parseFloat);
minimum.push([ date, R.min(levels) ]);
maximum.push([ date, R.max(levels);
var averageLevel = R.sum(levels) / levels.length;
average.push([date, averageLevel]);
})
因此,原始输入的数据就像这样(样本片段):
[ { date: "2009-01-01",
id: null,
level: "0.08",
},
// ...
]
目前,groupedData是这样的:
{ "2009-01-01":
[ { date: "2009-01-01",
id: null,
level: "0.08"
}
],
// ...
}
groupedLevels看起来像这样,例如:
{ "0-1":
[ [ { date: "2009-01-01".
id: null,
level: "0.08"
}
],
// ...
],
// ...
}
我想跳过所有长度为1的数组,并将对象存储在那里。
答案 0 :(得分:0)
我认为你可以通过替换这一行来解决这个问题:
var levels = _.map(_.pluck(points, "level"), parseFloat);
有了这个:
var levels = _.map(_.pluck(points[0], "level"), parseFloat);
...但我认为真正的问题可能是你在不需要的时候做了groupBy
两次。这个单groupBy
应该是等价的,但没有额外的嵌套数组:
var groupedLevels = _.groupBy(data, function(item) {
var dateParsed = parseDate(item.date);
var month = dateParsed.getMonth();
var day = dateParsed.getDate();
return month + '-' + day;
});
这样,您的each
应该按预期工作。