javascript - 计算多维数组的平均值

标签 javascript sorting 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

关于javascript - 计算多维数组的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26484654/

相关文章:

javascript - 将自定义 header 添加到 Content-disposition 旁边的 FormData/multipart

javascript - 带有 Node.js 版本的 Angular Cli 和 Ionic 3

javascript - 错误获取日期属性的时刻

javascript - jQuery:根据类型对子项进行排序

php - 将数据库数据放在多维数组中

javascript - 遍历嵌套的对象数组,呈现不同的标记

java - 如何使用 JTable 的行排序器恢复原始行顺序?

algorithm - 奇怪排序的递归关系

c - 如何一次输入二维字符串的所有元素?

ruby - 将字符串转换为 Ruby 中的多维数组?