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

配列4の値は、配列2の平均です。

Array3とArray4を作成するには、javascriptまたはjqueryコードはどのようになりますか?

編集:

次のように値をグループ化します。

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

の各値を繰り返し処理しますArray1Array2これは、が同じ長さであることを前提としています。

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

アンダースコアを使用すると、次のことができます。

//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 に答える
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 に答える