所以我几乎不好意思问这个问题,但是,唉,我已经触及了我的头颅......我有这个数据结构,它是一个嵌套的对象数组,表示后续的3个跨度天。我需要遍历整个阵列(我正在处理的比这个大得多......)并获得' x'的平均值。这三天我也需要得到平均值的' y'在同一时期。
var myArray = [
{
day: 1,
values: [
{
x: 8
}, {
y: 10
}
]
}, {
day: 2,
values: [
{
x: 9
}, {
y: 15
}
]
}, {
day: 3,
values: [
{
x: 10
}, {
y: 16
}
]
}
];
我有这个嵌套循环...
var avg = 0;
for (var i=0; i<data.length; i++) {
for (var b=0; b<data[i].values.length; b++) {
avg += data[i].values[b] / data[i].values.length
}
}
显然,这是不正确的,所以我向你们寻求帮助。我接近这个吗?我正在寻找一个直接JS的解决方案,或者可能是一个涉及UnderscoreJS的解决方案,因为我正在使用的实际数据结构包含30k行JSON文件中的300多个这些对象。
提前致谢..
答案 0 :(得分:3)
var totalX = 0;
var totalY = 0;
for (var i = 0; i < myArray.length; i++) {
totalX += myArray[i].values[0].x;
totalY += myArray[i].values[1].y;
}
var averageX = totalX / myArray.length;
var averageY = totalY / myArray.length;
答案 1 :(得分:1)
var avgx = myArray.map(function(obj) {return obj.values[0].x})
.reduce(function(a, b) { return a + b }) / myArray.length;
var avgy = myArray.map(function(obj) {return obj.values[1].y})
.reduce(function(a, b) { return a + b }) / myArray.length;
答案 2 :(得分:0)
您可以使用reduce
实现它:
var result = myArray.reduce(function(acc, obj, i) {
var len = myArray.length;
acc.x += obj.values[0].x;
acc.y += obj.values[1].y;
if (i == len-1) {
acc.x /= len;
acc.y /= len;
}
return acc;
}, {x:0, y:0});
console.log(result); //=> {x: 9, y: 13.66}