Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对数组列求和,并将结果存储在二维数组(Javascript)中_Javascript_Arrays_Google Apps Script_Multidimensional Array_Google Sheets - Fatal编程技术网

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

对数组列求和,并将结果存储在二维数组(Javascript)中,javascript,arrays,google-apps-script,multidimensional-array,google-sheets,Javascript,Arrays,Google Apps Script,Multidimensional Array,Google Sheets,我正在使用GoogleSheets的脚本编辑器在表/数组的值之间进行操作。我有一张像这样的桌子: | UserA | UserB | UserC | Movie1 | 2 | 8 | 6 | Movie2 | 4 | 6 | 0 | Movie3 | 5 | 2 | 3 | Movie4 | 2 | 7 | 2 | 我需要将每个用户的评级与第一个用户的评级相加,获得另一个包含每个总和结

我正在使用GoogleSheets的脚本编辑器在表/数组的值之间进行操作。我有一张像这样的桌子:

       | 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;
var userRatings=[];
var mainUserRatings=[];
var ultraArray=[];
对于(i=0;i
此函数返回一个数组,该数组的行数和列数与第一个表的行数和列数相同(只有它们被切换),并且只有最后一列中的数据在所有行中重复。简言之:这是一场灾难。我甚至还没有达到我把数据和第一列相加的程度


我知道我将数据推入新数组的方式有问题,可能循环的逻辑也有问题,但我没有找到正确的组合。非常感谢您的帮助。

希望我正确地解释了您的问题,但下面是一个示例,说明如何将第一个用户的评分与数据库中其他用户的评分相加。假设您有一个二维分级数组,其中索引i处的数据库表示特定电影的分级,您可以迭代所有分级并添加第一个分级的结果,如下所示。希望这有帮助

var数据库=[[2,8,6]、[4,6,0]、[5,2,3]、[2,7,2];
var新评级=[];
风险价值评级;
var比率总和;
varⅠ,j;
对于(i=0;iconsole.log(新评级)
使用
Array.map
获取所需的结构

这大大减少了代码行数

想法是迭代
数据库
,并为其中的每个数组添加用户A的评级

var数据库=[
[2, 8, 6],
[4, 6, 0],
[5, 2, 3],
[2, 7, 2]
];
var mainUserRating=database.map(函数(v,i){//v:element;i:index
返回v.map(函数(ele,index){//,因为v本身是一个数组
返回ele+v[0];
});
});

log(mainUserRating)
更简单的方法是将所有第一列元素存储到1D数组中,然后继续将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;
}

这确实奏效了!为了跳过指定的列/行,我只需将所有的0替换为1,其余的都给出了正确的结果。谢谢你,麦克斯!这也有效,看起来是一个更干净的解决方案。但我不太明白它是如何工作的。如果我跳过第一行(用户名称)和第一列(电影名称)进行计算,我会怎么做?非常感谢Sandeep。