Javascript 数组 - 将用户输入输出回给他们?

Javascript Array - Outputting users input back to them?

你好,我正在大学学习 JavaScript,这只是我的第一年,我们被要求做以下问题...

生日:邀请用户输入 12 个生日,每个月一个。这些被写入一个数组。然后用户应该能够指定月份并将该月份的生日返回给他们……例如如果它们指示 1 月 16 日 - 返回 Aidan,因为他的名字是 1 月输入的生日。

我们必须提示用户输入一年中每个月的朋友姓名和生日。然后他们可以输入一个月,它会输出那个月是哪个朋友的生日。

我们必须将这道题做成数组。我已经能够使用非常长的 if/else 语句来做到这一点,但我不知道从哪里开始使用数组。

任何帮助将不胜感激。

如果我有声明,我没有数组代码:

function displayDetails() {
  var jan = prompt("Enter a name and date for January");
  var feb = prompt("Enter a name and date for February");
  if (month = "january") {
    alert(jan);
  } else if (month = "february") {
    alert("" + feb);
  }
  // ETC.
}

我首先声明数组并输入月份。

var months = new Array ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct"‌​,"Nov","Dec"];

注意:将此回答视为对堆栈溢出的热烈欢迎。下次,如果您想最大限度地获得答案,请展示一些研究成果。我没有写出full/best问题的答案,你必须通读答案并将信息组合到你自己的程序中。

将问题分解成小块并找出解决这些问题的方法。您已经解决了几个子问题。

Birthdays: The user is invited to enter 12 birthdays, one in each month. These are written into an array. The user should then be able to indicate a month and have the birthday for that month returned to them… e.g. if they indicate January, 16th - Aidan is returned as his name and birthday was entered for January.

1。 "Enter ... birthdays"

你已经写过这行,所以你知道如何让某人 "enter a birthday"。

var jan = prompt("Enter a name and date for January");

2。 "one in each month"

您还尝试创建一个包含所有月份的数组。如果您检查浏览器的 javascript 控制台,您会看到这导致错误:

// Uncaught SyntaxError: Invalid or unexpected token
var months = new Array ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct"‌​,"Nov","Dec"];

这是因为您混淆了两种创建数组的方法:

var months = ["Jan", "Feb"];         // Using brackets
var months = new Array("Jan", "Feb") // Using new

成功定义数组后,您可以通过以下方式检索值:

var theFirstMonth = months[0];       // Sets theFirstMonth to "Jan"

现在,您需要知道如何自动 "loop" 或 "iterate" 其值。例如,通过使用 for 循环。

for (var i = 0;            // Start with a variable `i`, that contains `0`
     i < months.length;    // As long as `i` is smaller then the nr. of months
     i = i + 1) {          // Execute the block below and increase `i` by 1 in the end
  console.log(months[i]);  // Retreive the value from the array using `i`
}

您将在控制台中看到 12 个打印件,打印每个月的名称。

3。 "written into an array"

除了从数组中检索值,您还可以写入它。这与任何其他变量一样完成,使用 =:

var myArray = ["X", "B", "C"];
myArray[0] = "A"; // myArray is now ["A", "B", "C"]

您还可以使用 push

将项目添加到数组的 end
var myArray = ["A", "B", "C"];
myArray.push("D"); // myArray is now ["A", "B", "C", "D"]

将两者结合起来应该是这样的:(我会让你填写空白部分)

var months = ["January", "February"];
var birthdays = [];

for (var i = 0; i < months.length; i = i + 1) {
  // Retreive the name of the month, create the question "Enter for ..."
  // ...

  // Ask the user for a date and name, store it in a variable
  // ...

  // push the input to the birthdays array
  // ...
}

4。 "indicate a month, ... is returned"

您知道如何获取用户输入,并且知道如何从数组中检索值。您只剩下一件事需要做:在数组中找到值的索引。取这个数组:

var months = ["January", "February", "March"];

"January" 的索引是 0,因为它位于第一个位置。 "February"的索引是1。等等。

知道如何遍历所有值后,您能想出一种方法来找到特定值的索引吗?

var valueToSearch = "March";
var months = ["January", "February", "March"];
var valueIndex = -1;

for (var i = 0; i < months.length; i = i + 1) {
  if (months[i] === valueToSearch) {
    valueIndex = i;
  }
}

把这些东西放在一起:

输入:

  • 创建一个包含所有月份的数组
  • 为生日创建一个空数组
  • 遍历每个月并要求用户输入
  • 将用户输入推送到您的生日数组

输出:

  • 询问用户月份的名称
  • 在您的月份数组中查找本月的索引
  • 在您找到的索引处提醒生日数组中的生日输入