Snake Through Javascript Array

时间:2017-02-27 14:35:36

标签: javascript arrays node.js distribution discord

这可能是一个简单的答案,但我是一个爱好者,这真的打破了我的大脑。我试图通过遍历数组为变量赋值。

我的代码是用Discord.js编写的Discord的TTRPG工具机器人。对于这个特殊功能,我希望根据输入的玩家数量滚动 n stat卷,然后将所有这些卷汇集在一起​​并对它们进行排序。从那里开始,我希望让它穿过排序的数组,为每个玩家提供一个统计集,以便每个玩家都能在一个公平的比赛场地上接近。

例如,如果输入是3个玩家,则机器人将滚动3组6个统计数据并将它们汇集到一个数组中。为了简单解释,我们说我们从1-18推送了所有数字。

  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

会被分配到

  

A B C C B A A B C C B A A B C C B A

这样最终的变量

  

A = [1,6,7,12,13,18]

     

B = [2,5,8,11,14,17]

     

C = [3,4,9,10,15,16]

我现在的代码只是通过循环(A,B,C,A,B,C ......)对它们进行排序,这不会导致玩家被平均。我已经尝试了一些不同的方法来获得我需要的结果,但是结束变量只能被分配一次,中间变量会分配更多的统计数据,或者每个玩家变量只分配一个统计数据。 / p>

我已尝试在线搜索任何帮助,但用Google搜索任何内容" Javascript"和" Snake"只是教你如何制作游戏,所以我真的希望你们能够帮助我。非常感谢你,如果我想说的话不清楚,我很抱歉,所以我非常乐意回答你可能有的任何问题,以帮助解决这个问题。 !

代码:

if (msgContent.startsWith(".dstats ")) {
  let args = msgContent.split(" ").slice(1);
  var regex = /^\d+$/;
  var statIndex = [];
  var reply;
  var forward = true;
  if(regex.test(args) && args <= 10){
    for(var i = 0; i < args*6; i++){
      statRoll();
      statIndex.push(randStat);
    };
    distSort = statIndex.sort(sortNumber);
    for( j = 0; j < args; j++){
      this['player'+j] = [];
    };
    var playIndex = 0;
    for( f = 0; f < distSort.length; f++){
      if(playIndex < args && playIndex >= 0){
        this['player'+playIndex].push(distSort[f]);
      }else {
        playIndex = 0;
        this['player'+playIndex].push(distSort[f]);
      };
      playIndex++;

    };
    reply = "Your stats blocks are as follows:\n";
    for (k = 0; k < args; k++){
      reply += "Player " + (k+1) +": [" + this['player'+k].join(', ') + "]\n";
    };
    msg.reply(reply);
  }else(
    msg.reply("Looks like you inputted an improper number or your number is too high. Check your command and try again!")
  );
}

3 个答案:

答案 0 :(得分:1)

我建议您在这种情况下使用JSON,因为这样可以更轻松地处理您的数据。

无论如何,以下代码应该可以解决问题:https://jsbin.com/quvexu/edit?js,console

&#13;
&#13;
// Declare input and output variables
arr1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18];
arr2 = ['a','b','c','c','b','a','a','b','c','c','b','a','a','b','c','c','b','a'];
results = {a:[], b:[], c:[]};

// Do the work
arr2.forEach(function(d,i){ results[d].push(arr1[i]); })

// Print the results 
console.log("Results", results);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以迭代所需部件的给定长度和部件数量,然后对均匀和不均匀的部件采用计算值。

&#13;
&#13;
var length = 6,
    lines = 3,
    result = [],
    i, j;
    
for (i = 0; i < length; i++) {
    for (j = 0; j < lines; j++) {
        result[j] = result[j] || [];
        result[j].push(i * lines + (i % 2 ? lines - j : j + 1));
    }
}

console.log(result);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

答案 2 :(得分:1)

您可以执行以下操作。它将处理// Need to exclude My Music, My Pictures, My Videos (from Documents folder) std::string stem = current.filename().string(); //If not equal to excludes, then copy away; else skips them if (!(stem == "My Music" || stem == "My Pictures" || stem == "My Videos")) { fs::copy_file(current,destination / current.filename(), fs::copy_option::overwrite_if_exists); } 个玩家,并按照你描述的顺序为每个玩家分6点。

n