求和数组列并将结果存储在二维数组中(Javascript)

时间:2017-01-15 04:25:24

标签: javascript arrays multidimensional-array google-sheets

我正在使用Google表格的脚本编辑器在表格/数组的值之间进行操作。我有一张看起来像这样的表:

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

我正在使用两个“for”循环遍历所有列和行,但我无法将结果存储回二维数组。这就是我所拥有的:

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;

此函数返回一个数组,该数组具有与第一个表一样多的行和列(只有它们被切换),并且只有最后一列中的数据在所有行中重复。简而言之:这是一场灾难。我甚至没有达到我用第一列总结数据的程度......

我知道我将数据推送到新阵列的方式有些不对劲,可能还有循环逻辑,但我找不到合适的组合。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

使用A10获取所需的结构。

这大大减少了代码行数。

想法是迭代Array.map并为每个数组添加用户A的评级

database

答案 2 :(得分:0)

更简单的方法是将所有第一列elemens存储到一维数组中,然后继续将1D数组的每个元素添加到2D数组的各个元素。

伪代码可能如下所示:

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