我有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
答案 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
值存储为键,将计数/总数存储为值(可以从中计算平均值)。
答案 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
给读者留下了一个练习。 : - )
我同意另一张海报,最好找到另一种表示这些数据的方法,一种更适合你想要做的处理。