两个数组的组(平均值)

时间:2013-01-17 12:22:43

标签: javascript jquery

我有2个数组,其中包含以下数据:

Array1 = [A, A, A, A, B, B, B, C, C, C, C, C];    
Array2 = [4, 2, 4, 6, 3, 9, 6, 5, 4, 6, 2, 8];

我想从这些值创建2个新数组:

Array3 = [A, B, C];    
Array4 = [4, 6, 5];

数组4中的值是Array2的平均值。

javascript或jquery代码应该如何创建Array3和Array4?

编辑:

我想将这些值分组:

Array1      Array2
  A           2
  A           4
------------------
  B           2
  B           6
------------------
  C           3
  C           6
  C           9

     result:

Array3      Array4
  A           3          Average from 2 and 4
  B           4          Avarage from 2 and 6
  C           6          Average from 3, 6 and 9

3 个答案:

答案 0 :(得分:1)

迭代Array1的每个值。这假定Array2具有相同的长度:

var Array1 = ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C'];    
var Array2 = [4, 2, 4, 6, 3, 9, 6, 5, 4, 6, 2, 8];

var helper = {};

Array1.forEach(function (elem, index) {
  if (typeof helper[elem] === 'undefined') {
    helper[elem] = {'count': 0, 'total': 0} 
  }
  helper[elem].count++;
  helper[elem].total += Array2[index];
});

var Array3 = [];
var Array4 = [];

for (item in helper) {
  if (helper.hasOwnProperty(item)) {
    Array3.push(item);

    Array4.push(parseInt(helper[item].total / helper[item].count));
  }
}
console.log(Array3, Array4);

我所做的是创建一个辅助对象,将Array1值存储为键,将计数/总数存储为值(可以从中计算平均值)。

http://jsfiddle.net/V38Lt/

答案 1 :(得分:0)

尝试

// Your initial Variables
Array1 = ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C'];    
Array2 = [4, 2, 4, 6, 3, 9, 6, 5, 4, 6, 2, 8];

// a temporary variable where we store our progress
var groups = {}

$.each(Array1, function(index,item){
    if (!groups[item]){
        groups[item] = {sum:0, count:0};
    }
    groups[item].sum += Array2[index]; // sum values belonging to same key 
    groups[item].count++; // increase counter of values per key
});

// create the letter only array
var Array3 = $.map(groups,function(value,key){
    return key;
});
// create the averages array
var Array4 = $.map(groups,function(value,key){
    return value.sum / value.count;
});

// show the results
console.log(Array3, Array4);

答案 2 :(得分:0)

使用下划线,你可以这样做:

//create array of form [['A',4],['B',3]...] etc.
var interleaved=_.zip(Array1,Array);

//create object of form {A:[4,2,4], ...}
var grouped=_.groupBy(interleaved,function(pair){return pair[0];});

var Array3 = _.keys(grouped);
var Array4 = _.map(grouped,function(v){return array_sum(v);});

array_sum给读者留下了一个练习。 : - )

我同意另一张海报,最好找到另一种表示这些数据的方法,一种更适合你想要做的处理。