1

我有 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];

Array 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
4

3 回答 3

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/

于 2013-01-17T12:58:42.523 回答
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);
于 2013-01-17T13:10:34.430 回答
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留给读者练习。:-)

我同意另一张发帖者的观点,即找到另一种表示这些数据的方式可能会更好,这种方式更适合您想要进行的处理。

于 2013-01-17T13:19:53.200 回答