对数组列求和,并将结果存储在二维数组(Javascript)中
我正在使用GoogleSheets的脚本编辑器在表/数组的值之间进行操作。我有一张像这样的桌子:对数组列求和,并将结果存储在二维数组(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 | 我需要将每个用户的评级与第一个用户的评级相加,获得另一个包含每个总和结
| 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;i console.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。