2

Googleシートのスクリプトエディタを使用してテーブル/配列の値を操作しています。私はこのようになりますテーブルを持っている:配列配列を合計し、結果を二次元配列(JavaScript)に格納する

 | UserA | UserB | UserC | 
Movie1 | 2 | 8 | 6 | 
Movie2 | 4 | 6 | 0 | 
Movie3 | 5 | 2 | 3 | 
Movie4 | 2 | 7 | 2 | 

私はそれぞれの和の結果を別の配列を取得し、最初のユーザの格付けを持つすべてのユーザーの評価を合計する必要があります。この場合

、結果は次のようになります。

 | UserA+A | UserB+A | UserC+A | 
Movie1 | 4 | 10 | 8 | 
Movie2 | 8 | 10 | 4 | 
Movie3 | 10 | 7 | 8 | 
Movie4 | 4 | 9 | 4 | 

私はループ「を」2ですべての列と行を実行しているんだけど、私は戻って二次元に結果を格納するために管理することはできませんアレイ。

var userRatings = []; 
var mainUserRatings = []; 
var ultraArray = [];  

for (i = 0; i < database.length; i++) { // Run through all movies (rows) 
    var mainUserRating = database[i][1]; // Ratings from UserA 
    mainUserRatings.push(mainUserRating); 

    for (n = 1; n < database[0].length; n++) { // Run through all users (columns) 
     var userRating = database[i][n]; // Ratings from User "n" 
     userRatings[i] = userRating; 
    } 

    ultraArray[i] = userRatings; 
} 
return ultraArray; 

この関数は、最初のテーブルと同じ数の行と列を持つ配列を返します(彼らだけが切り替わっている)とだけ最後の列からのデータは、すべてを繰り返される:これは私が持っているものです行。つまり、それは災害です。そして、私は最初の列でデータを合計するところに達していません...

私は新しい配列にデータをプッシュしている方法について何か間違っています。ループの論理ですが、私は正しい組み合わせを見つけることができません。どんな助けでも大歓迎です。

答えて

2

うまくいけば私はあなたの質問を正しく解釈しましたが、ここでは、データベース内の残りのユーザーレーティングと最初のユーザーの評価を合計する方法の例があります。インデックスの2次元配列があると仮定すると、インデックスiのデータベースが特定のムービーのレーティングを表している場合、すべてのレーティングを繰り返し、以下のように最初のレーティングの結果を追加できます。お役に立てれば!

var database = [ [2, 8, 6], [4, 6, 0], [5, 2, 3], [2,7,2] ]; 
 
var newRatings = [ ]; 
 
var firstUserRating; 
 
var ratingSums; 
 
var i, j; 
 

 

 
for (i = 0; i < database.length; i++) { // Run through all movies (rows) 
 
    firstUserRating = database[i][0]; // Get the first user's rating. 
 
    ratingSums = []; 
 
    
 
    // Run through the ratings for the current movie (database[i]) 
 
    for (j = 0; j < database[i].length; j++) { 
 
    // Return the original value + firstUserRating. 
 
    ratingSums.push(firstUserRating + database[i][j]); 
 
    } 
 
    
 
    newRatings.push(ratingSums); 
 
} 
 
console.log(newRatings);

+0

擬似コードは次のように見えるかもしれません!名前のついた列/行をスキップするためにすべてのゼロを置き換えるだけでした。残りは正しい結果でした。ありがとうございましたMax! – ireth92

+0

Np!それはうまくいった –

2

したい構造を得るためにArray.mapを使用してください。

これにより、コード行数が大幅に削減されます。

アイデアはdatabaseを反復処理することであり、ユーザAの評価

var database = [ 
 
    [2, 8, 6], 
 
    [4, 6, 0], 
 
    [5, 2, 3], 
 
    [2, 7, 2] 
 

 
]; 
 

 
var mainUserRating = database.map(function(v, i) { //v: element; i: index 
 
    return v.map(function(ele, index) {   // since v itself is an array 
 
    return ele + v[0];    
 
    }); 
 
}); 
 

 
console.log(mainUserRating)

+0

それも動作し、はるかにクリーンなソリューションのように見えます。しかし、私はそれがどのように機能するのかよく分かりません。私が最初の行(ユーザーの名前)と最初の列(映画の名前)をスキップして数学を行うとすれば、どうすればいいですか? Sandeepありがとうございました。 – ireth92

0

を追加内の配列のそれぞれについて簡単な方法は、図1Dに全ての第1の列elemensを記憶することです配列を作成し、次に、2D配列の各要素に1D配列の各要素を追加します。実際に働いていた

var firstColumn = [ ]; //which will be storing the only first column elemens 
for each row in the table{ 
    Add corresponding element of the firstColumn; 
}