我正在使用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;
此函数返回一个数组,该数组具有与第一个表一样多的行和列(只有它们被切换),并且只有最后一列中的数据在所有行中重复。简而言之:这是一场灾难。我甚至没有达到我用第一列总结数据的程度......
我知道我将数据推送到新阵列的方式有些不对劲,可能还有循环逻辑,但我找不到合适的组合。任何帮助将不胜感激。
答案 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;
}