Javascript如何在数组中将单独的字符连接成一个字符串?

时间:2016-07-11 02:45:32

标签: javascript arrays join associative-array string-concatenation

我为下面的“Heads or Tails”游戏编写了一个代码,并且:

var userInput = prompt("Enter maximum number output: ");

function coinFlip() {
  return (Math.floor(Math.random() * 2) === 0) ? 'Heads' ; 'Tails';
}

for (var i = 0; i < 6; i++)
{
  var result = [];

  result["randomNum"] = (Math.floor(Math.random()*userInput);

  result["coin"] = (coinFlip());
}

我正在尝试使用代码计算总头数和总尾数之和:

var headsCount = 0;
var tailsCount = 0;

for (var j = 0; j < result["coin"].length; j++)
{
   if (result["coin"] == 'Heads')
      headsCount++;
   else
      tailsCount++;
}

唯一的问题是,它会将'Heads'数组中'Tails'result["coin"]的每个字符计为单独的(例如'H'-'e'-'a'-'d'-'s'),而不是整个字符串(比如"Heads")。因此,每次上面的循环运行时,它不会增加1,而是递增+5

我希望它仅增加+1

如何使代码读取result["coin"]中存储的完整字符串而不是逐个字符?

已编辑 - 将&lt; 2更改为* 2

1 个答案:

答案 0 :(得分:1)

var result = [];位于for循环中,因此每次都会用空数组覆盖它。因此,当您尝试循环结果时,其中只有一个项目;最后一个。将结果数组拉出循环,以便您可以在每次迭代中添加它。

似乎userInput应该是循环的次数。不确定为什么要把它放在result["randomNum"]中。 result是一个数组,而不是一个对象,所以它只有整数键。

而不是将掷硬币的结果添加到result["coin"]我认为你的意思是将它添加到数组中,所以在抛出它六次之后它可能看起来像这样:["Heads", "Heads", "Tails", "Heads", "Tails", "Tails"]。您可以通过硬币投掷输出调用result.push来完成此操作。

要随机获得两个结果中的一个,请将Math.random()的输出与0.5进行比较,这是限制之间的一半。小于0.5的数字可以被认为是头部,而大于或等于0.5的数字可以被认为是尾部。

总而言之,这就是我认为您的目标:

function coinFlip() {
  return Math.random() < 0.5 ? 'Heads' : 'Tails';
}

var result = [];
var userInput = parseInt(prompt("Enter maximum number output: "), 10);
for (var i = 0; i < userInput; i++) {
  result.push(coinFlip());
}

var headsCount = 0;
var tailsCount = 0;

for (var j = 0; j < result.length; j++) {
  if (result[j] == 'Heads')
    headsCount++;
  else
    tailsCount++;
}

console.log(headsCount, "heads and", tailsCount, "tails");

所有这一切,肯定有待改进的地方。您不需要循环一次来构建结果,然后循环第二次以读取结果。

您可以计算硬币翻转时的头/尾数。例如:

function isCoinFlipHeads() {
  return Math.random() < 0.5;
}

var numFlips = parseInt(prompt("How many flips?"), 10);
var heads = 0;
var tails = 0;
for (var i = 0; i < numFlips; i++) {
  isCoinFlipHeads() ? heads++ : tails++;
}
console.log(heads, "heads and", tails, "tails");