【问题标题】:Results from loop don't work correctly循环的结果无法正常工作
【发布时间】:2016-11-19 16:50:27
【问题描述】:
  1. 我想循环遍历一个数组。
  2. 任何长度大于 3 的索引我都想缩写。
  3. 我想将新的缩写月份放入一个新数组中。
  4. 我想通过将结果写入控制台来测试它是否有效。

我可以让代码运行,但是结果并不如我所愿。据我了解,循环运行为真,运行 if 语句,运行为真,运行代码块。之后,循环应该迭代并继续,只要 i

var months = ["January", "Febuary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var monthsAbbrev = [];

for (var i = 0; i < months.length; i++) {
if (months[i].length > 3) {
monthsAbbrev = months[i].slice(0, 3);
}
}

console.log(monthsAbbrev);

【问题讨论】:

  • 在OP的层面,我宁愿给他这个链接:w3schools.com/jsref/jsref_push.asp
  • 它没有按您期望的方式工作的原因是您的分配是char[] 而不是string[] 并且每次都替换该数组。您可以使用console.log(monthsAbbrev[0]); 验证这一点。已经有很多答案告诉你该怎么做,但没有告诉你为什么它不起作用。

标签: javascript arrays loops iteration


【解决方案1】:

你可以通过Array.prototype.map()简单地做到这一点

var months = ["January", "Febuary"]; //sample data for better understanding
var monthsAbbrev = months.map(v => v.substr(0,3));
console.log(monthsAbbrev); //["Jan", "Feb"]

顺便说一句,您在代码中的目标数组中没有任何pushing,这就是问题所在。

【讨论】:

    【解决方案2】:

    除了推送之外,您可以省略长度 > 3 的检查,因为 slice 已经在这样做了,这样可以防止错过某个月份,例如 'May'

    var months = ["January", "Febuary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
    var monthsAbbrev = [];
    
    for (var i = 0; i < months.length; i++) {
        monthsAbbrev.push(months[i].slice(0, 3));
    }
    
    console.log(monthsAbbrev);

    【讨论】:

    • 谢谢尼娜...我不会事先发现的。非常感谢您的反馈和帮助!
    【解决方案3】:

    您需要将月份添加到您的monthsAbbrev 数组中。一种方法是使用.push() 函数:

    var months = ["January", "Febuary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
    var monthsAbbrev = [];
    
    for (var i = 0; i < months.length; i++) {
      if (months[i].length > 3) {
        monthsAbbrev.push(months[i].slice(0, 3));
      }
    }
    
    console.log(monthsAbbrev);

    【讨论】:

    • 非常感谢 j08691。这有很大帮助并解决了问题。我将更详细地研究代码并确保我理解语法,更不用说更好地理解 push 属性了。无论如何,谢谢!
    【解决方案4】:

    你只需要推动形成的数组。休息一下吧。

    var months = ["January", "Febuary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
    var monthsAbbrev = [];
    
    for (var i = 0; i < months.length; i++) {
    if (months[i].length > 3) {
    monthsAbbrev.push(months[i].slice(0, 3));
    }
    }
    
    console.log(monthsAbbrev);

    【讨论】:

    • 谢谢阿扬。我不熟悉 push 属性,但现在它是有道理的。您将缩写月份添加到 monthsAbbrev 变量中,然后使用 push 属性推送下一个变量。我是编码新手,但我真的很享受我目前所学的东西。我希望在下个月开始一个 Web 开发训练营。无论如何,再次感谢!
    猜你喜欢
    • 2019-01-01
    • 2014-12-02
    • 2013-08-09
    • 2013-10-30
    • 2013-10-19
    • 2017-02-03
    相关资源
    最近更新 更多