如何在一个循环内(另一个循环内)创建数组并在 JavaScript 中将它们传回?

问题描述 投票:0回答:2

我正在使用 Google Docs Spreadsheet API 来跟踪我的一些朋友之间的竞争。我有一些伟大的想法,但现在我很困惑。我试图在循环内创建 20 个不同的数组(见下文),然后在循环外评估每个数组,我真的不想编写 20 个“if...then”语句。

注意:以下摘要可能会也可能不会帮助您回答我的问题。您可能想跳到代码,然后在需要时阅读此内容:)

程序摘要:每个玩家分配有利于一组二元结果事件中的一个可能结果的分值。当事件发生时,如果结果发生,玩家要么获得分配的分数,要么如果发生相反的结果,则不会获得分数。我的目标是 1) 准确计算出一名选手何时被淘汰,以及 2) 突出显示所有剩余赛事,必须获胜,他们才有机会获得并列第一。

我没有试图以某种方式评估所有可能性(5个玩家选择,2^16个结果......我的计算机科学知识为零,但这即使对于现代计算机来说似乎也是一个令人难以置信的艰巨任务)我想出了一个替代方案主意。脚本循环遍历每个玩家,对抗其他对手。它根据玩家的价值分配和已经确定的游戏来计算玩家可以获得的最大分数。对于一名玩家和一名对手,它会检查该玩家对那个对手的最佳可能结果,如果有任何对手他无法击败,即使在最好的情况下,他也会被淘汰。

这部分很简单——在循环内部运行之后,我只需调整之前创建的全局变量,当外部循环完成时,只需获取这些变量并将它们写入工作表即可。

不幸的是,这错过了他可以对抗每个对手的最佳情况,但不能同时对抗多个对手。

所以下一步就是我现在正在尝试做的事情。我什至不确定我是否可以在不向您展示整个电子表格和脚本的情况下给出一个很好的解释,但我会尝试。所以我现在想做的是计算每个玩家针对给定其他玩家的每个事件的“价值”。如果玩家和对手都为一项事件分配了支持相同事件结果的分数,则事件的价值是选择之间的差异(如果玩家选择较高,则为正,如果较低,则为负),如果他们选择了相反的事件结果,则为总和。现在,我做与以前相同的事情 - 为玩家对抗给定对手制定最佳情况 - 但现在我检查玩家在最佳情况下可以击败对手的程度。然后,我根据该差异评估事件值(的绝对值),如果它更大,则该事件必须获胜(如果事件值为负,则必须失败)。并且,如果一项赛事既是“必胜”又是“必败”的赛事,则该玩家将被淘汰。 问题是第二步要求我为每个玩家-对手组合创建一个新的值数组,然后在创建后使用这些值执行操作。

我意识到一种方法是创建 20 个不同的数组,并在整个循环中不断检查

if (player == "1" && opponent == 2){}

并相应地填充数组,但这似乎有点荒谬。更重要的是,整个项目是我学习 JavaScript 的尝试,所以使用一个耗时的解决方法没有教给我任何新东西有什么意义呢?

我试图理解方括号表示法,因为它似乎是我问题的答案,但很多人也建议不可能通过连接另一个变量的值来创建变量名......所以无论如何,这就是我正在尝试的。我真的很感激修复我的方法,或者更好的方法。

for (var player=1; player<6; player++){ if(player==1){look up certain columns in the spreadsheet and save them to variables} //ditto for other players for(var opponent=1; opponent<6; opponent++){ if(player!=opponent){ if(opponent==1){save more values to variables} //ditto for other players for(var row=9; row<24; row++) { //Now the script goes down each row of an array containing the original //spreadsheet info, and, based on information determined by the variables //created above, get values corresponding to the player and opponent. //So what I'd like to do here is create "array[1,2]==" and then "array[1,3]==" //and so forth, creating them globally (I think I understand that term by now) //so I can refer to them outside of the loops later to do some evaluatin'. } }} //get array[1,2]...array[5,4] and do some operations with them.

我真的期待您的建议和想法!

javascript arrays loops google-docs-api
2个回答
1
投票

代码更新2

正如您所说:“我正在尝试

理解方括号表示法

”您可以看看我的新演示和代码: function getTeam(){ var array = [[1,2,3],[4,5,6],[7,8,9]]; // arrays within arrays // array myTeam var myTeam = [[],[],[],[]]; var playerNames = ["John", "Bert", "Dave", "Milton"]; var ages =[]; var weight = 104; // loop over the team arrayadd each player (name, age and weight) to the team for (i=0; i < myTeam.length; i++){ // fill the age array in a loop for (j=0;j<myTeam.length;j++) { ages[j] = 23 + j; } myTeam[i].push([playerNames[i], ages[i], weight]); } return myTeam; }

并用 Javascript 将它们传回

您能详细说明一下这部分吗?

更新

var valuesOfPlayers=[]; for (var player=1; player<6; player++){ // look up certain columns in the spreadsheet and save them to variables // you could call a funcntion and return the values you // collected in an array within an array as in the demo above valuesOfPlayers[player] = lookupColumnValues(player); for(var opponent=1; opponent<6; opponent++){ if(player!=opponent){ // save more values to variables valuesOfPlayers[player] = addValuesToVar(player); } for(var row=9; row<24; row++) { // if you collect the values in your first and second if clause // what other information do you want to collect // Please elaborate this part? } }}



1
投票

我可以在执行循环之前创建一个数组。 在每个循环开始时,我可以将字符串文字推送到包含玩家和对手值的数组中。 循环完成后,我可以将数组拆分为多个数组,或者使用正则表达式在一个大数组中对它们进行计算。

我仍然宁愿每次都创建新的数组——似乎这是一种更通用的方法,学习如何对我来说比使用这种解决方法更有教育意义。

© www.soinside.com 2019 - 2024. All rights reserved.