计算多维数组的平均值
Calculate Average value for multidimensional array
我有一个示例数组。它包含一天和多个构建失败。
var array = [["2014-08-13",3],
["2014-08-13",3],
["2014-08-14",4],
["2014-08-12",2],
["2014-08-13",3],
["2014-08-12",2]];
我想遍历这个数组,得到一个数组,它每天保存失败次数的平均值。我尝试了一些方法,但找不到合适的解决方案。
目标阵列应该是这样的:
var targetArray = [["2014-08-13",3],
["2014-08-14",4],
["2014-08-12",2]];
到目前为止,我得到的是制作一个包含三个日期的数组:
Array.prototype.contains = function(obj) {
var i = this.length;
while (i--) {
if (this[i] == obj) {
return true;
}
}
return false;
}
var array = [
["2014-08-13", 3],
["2014-08-13", 3],
["2014-08-14", 4],
["2014-08-12", 2],
["2014-08-13", 3],
["2014-08-12", 2]];
var targetArray = [];
for (var i = 0; i < array.length; i++) {
var temporaryArr = [];
var current = array[i];
var currentDate = current[0];
var currentValue = current[1];
console.log("current: " + current);
if (!targetArray.contains(currentDate)) {
temporaryArr[0] = currentDate;
targetArray[targetArray.length] = temporaryArr;
}
}
console.log(targetArray);
首先,你的日期必须是字符串,否则你会开始得到一些非常奇怪的输出:
var arr = [
['2014-08-13', 3],
['2014-08-13', 3],
['2014-08-14', 4],
['2014-08-12', 2],
['2014-08-13', 3],
['2014-08-12', 2]
];
创建一个新对象。我们将使用它的密钥来存储我们的日期和值,以存储故障和当天出现的次数。
var obj = {};
在数组上循环。如果密钥/日期不存在,则将其添加到对象中,并将值设置为包含失败次数的数组,并将当前计数设置为1。如果密钥/日期确实存在,请将失败次数添加到失败总数中,然后递增计数。
for (var i = 0, l = arr.length; i < l; i++) {
var el = arr[i];
var date = el[0];
var fails = el[1];
if (!obj[date]) {
obj[date] = [fails, 1]
} else {
obj[date] = [obj[date][0] + fails, obj[date][1] + 1]
}
}
最后在对象上循环,并将日期和平均值推回到一个新数组中。
var out = [];
for (var date in obj) {
out.push([date, obj[date][0] / obj[date][1]])
}
DEMO
下面的代码:
var array = [
["2014-08-13", 3],
["2014-08-14", 4],
["2014-08-13", 3],
["2014-08-12", 2],
["2014-08-13", 3],
["2014-08-12", 2]
];
function average(array) {
var ret = {}, retArr = [], tmp, time, value;
for(var i=0, len=array.length; i < len; i++) {
tmp = array[i];
time = tmp[0];
value = tmp[1];
if(time in ret) {
ret[time].push(value)
} else {
ret[time] = [value];
}
}
for(var p in ret) {
var total = 0;
ret[p].forEach(function(val) {
total += val;
});
retArr.push([p, total / ret[p].length]);
}
return retArr;
}
average(array);
var myArray = [["2014-08-13", 3],
["2014-08-13", 3],
["2014-08-14", 4],
["2014-08-12", 2],
["2014-08-13", 3],
["2014-08-12", 2]];
function getAverage(arr) {
var dates = [];
var values = [];
for(i=0; i<arr.length; i++){
var index = dates.indexOf(arr[i][0]);
if(index == -1){
dates.push(arr[i][0]);
values.push([arr[i][1]]);
}else{
values[index].push(arr[i][1]);
}
}
for(d=0; d<dates.length;d++){
var dateTotal = 0;
for(a=0;a<values[d].length;a++){ dateTotal += values[d][a] }
dates[d] = [dates[d], (dateTotal / values[d].length)]
}
return dates
};
getAverage(myArray);
相关文章:
- 使用JS查找数组的平均值
- JS:从整个数组中每次得到5个项目,并得到平均值
- Angularjs:访问范围变量数组并计算平均值
- 从javascript数组计算平均值
- 数组循环以确定范围平均值
- 使用多个分组依据查找哈希数组的平均值
- 查找1000个随机整数的数组的平均值javascript
- 计算数组中点的平均值-Javascript
- 计算多维数组的平均值
- 在数组对象上迭代并计算平均值
- 什么是“;键“;在Javascript数组中的平均值
- 使用Javascript从输入数组中查找平均值-计算不正确
- 计算数组中对象属性的平均值
- 在2d数组中,查找每列的平均值,但忽略0、,
- 将字符串数组转换为浮点数,然后查找转换后数组的平均值
- 求数组数据的平均值
- 计算JavaScript中多维数组的总体平均值
- 在表中打印存储在数组中的值的平均值
- 从json到数组的数组的基于日期的平均值
- 遍历数组并计算数组各部分的平均值