Javascript 将对象数组操纵为具有平均数的新数组。
我有一个我想要操作的数组,因为我需要将它用作D3.js的数据源。此数据集的一个示例是:Javascript 将对象数组操纵为具有平均数的新数组。,javascript,arrays,d3.js,Javascript,Arrays,D3.js,我有一个我想要操作的数组,因为我需要将它用作D3.js的数据源。此数据集的一个示例是: var data = [ {day: 1, month: 1, length: 100, year: 2010}, {day: 2, month: 1, length: 125, year: 2010}, {day: 3, month: 1, length: 150, year: 2010}, {day: 4, month: 1, length: 175, year: 2010},
var data = [
{day: 1, month: 1, length: 100, year: 2010},
{day: 2, month: 1, length: 125, year: 2010},
{day: 3, month: 1, length: 150, year: 2010},
{day: 4, month: 1, length: 175, year: 2010},
{day: 1, month: 2, length: 225, year: 2010},
{day: 2, month: 2, length: 250, year: 2010},
{day: 3, month: 2, length: 325, year: 2010},
{day: 1, month: 1, length: 225, year: 2011},
{day: 1, month: 1, length: 150, year: 2011},
{day: 1, month: 1, length: 190, year: 2011},
{day: 1, month: 2, length: 210, year: 2011},
{day: 2, month: 2, length: 110, year: 2011},
{day: 3, month: 2, length: 160, year: 2011},
{day: 4, month: 2, length: 190, year: 2011},
]
在本例中,我想创建一个新数组,其中两个数组的平均长度为一个月。例如:
var newData = [ [137.5, 266.7], [183.33, 167.5] ]
其中newData[0][1]是2010年第1个月的平均长度
我有一些问题,结合在一个好的方式。我可以创建长度之和,但要划分长度之和很困难。我的密码是:
data.forEach(function (el) {
for (var j = 0; j <= 3; j++) {
if (el.year === 2010 + j) {
for (var i = 1; i <= 2; i++) {
if (el.month === i) {
var oldLength = dataNew[j][i - 1] || 0;
var newLength = el.length + oldLength;
dataNew[j][i - 1] = newLength;
}
}
}
}
});
data.forEach(函数(el){
对于(var j=0;j您可以使用d3.js本身来简化您的工作并使您的代码更具可读性。使用d3.nest()
这是一个有效的所以原始数据的
日部分无关紧要?输入数据总是按月份和年份“排序”吗?输入数据从哪里来(可以修改该部分以立即提供所需的格式)?太棒了!我不知道nest()函数。谢谢。当我需要处理其他数据集时,这将非常有用。
var data = [
{day: 1, month: 1, length: 100, year: 2010},
{day: 2, month: 1, length: 125, year: 2010},
{day: 3, month: 1, length: 150, year: 2010},
{day: 4, month: 1, length: 175, year: 2010},
{day: 1, month: 2, length: 225, year: 2010},
{day: 2, month: 2, length: 250, year: 2010},
{day: 3, month: 2, length: 325, year: 2010},
{day: 1, month: 1, length: 225, year: 2011},
{day: 1, month: 1, length: 150, year: 2011},
{day: 1, month: 1, length: 190, year: 2011},
{day: 1, month: 2, length: 210, year: 2011},
{day: 2, month: 2, length: 110, year: 2011},
{day: 3, month: 2, length: 160, year: 2011},
{day: 4, month: 2, length: 190, year: 2011},
]
var nest = d3.nest()
.key(function(d){return d.year})
.key(function(d){return d.month})
.rollup(function(d){
return d3.mean(d, function(g){return g.length});
})
.entries(data)
console.log(nest[0].values[0]) // 137.5