【问题标题】:for loop printing out last item in my array onlyfor 循环仅打印出我数组中的最后一项
【发布时间】:2017-09-08 17:53:12
【问题描述】:

我希望我的 for 循环打印出数组中的每一项,而不仅仅是最后一项。不知道哪里错了:

var patients = ["Julia", "Kelly", "Thomas", "Clare"];

function lineOfPatients(line) {
 if (!line.length) {
     return "Empty"
 }
 for(var i = 0; i < line.length; i++) {
     var list = `${i + 1}. ${line[i]},`
 }
  return `The line is currently: ${list}`
}

 lineOfPatients(patients)

这将返回“当前行是:4. Clare”,

我希望它返回“当前线路是:1. Julia, 2. Kelly, 3. Thomas, 4. Clare”

【问题讨论】:

  • list初始化为"",然后使用list += ...而不是list = ...

标签: javascript arrays for-loop


【解决方案1】:

var list 在你的循环中被声明。这意味着它会在每次迭代中重新创建一个新值。在循环之外将此变量声明为数组。例如,

var list = new Array();

然后,在你的循环中,添加到数组中;

list[i] = .....

【讨论】:

  • 字符串连接在这里就足够了
  • 是的。我想这取决于他们想对这些物品做什么。如果只是打印,那么是的。否则,将它们分开会很有帮助。
  • 同意 - 不过应该是 new Array()[]
【解决方案2】:

您可以在 lines 数组上调用 join 方法,该数组将包含您的行。

var patients = ["Julia", "Kelly", "Thomas", "Clare"];

function lineOfPatients(line) {
    if (!line.length) {
        return "Empty";
    }

    var lines = [];

    for(var i = 0; i < line.length; i++) {
        var list = `${i + 1}. ${line[i]}`
        lines.push(list)
    }

    return `The line is currently: ${lines.join(", ")}`
}

console.log(lineOfPatients(patients))

【讨论】:

  • 这是最好的解决方案,IMO
  • @mhodges,谢谢伙计!
  • 两全其美,很好。
【解决方案3】:

您的问题是您每次通过循环都重新分配 list 变量,因此您正在覆盖以前的值。

为避免这种情况,请使用 += 运算符而不是 = 运算符,如下所示:

var patients = ["Julia", "Kelly", "Thomas", "Clare"];

function lineOfPatients(line) {
 if (!line.length) {
     return "Empty"
 }
 var list = "";
 for(var i = 0; i < line.length; i++) {
     list += `${i + 1}. ${line[i]}, `
 }
  return `The line is currently: ${list}`
}

console.log(lineOfPatients(patients))

【讨论】:

    【解决方案4】:

    您的代码的问题在于,在您的 for 循环的每次迭代中,您都重新声明了 var list = `${i + 1}. ${line[i]},`,以便在您返回时,list 仅等于数组中的最后一个元素。

    你可以这样做:

    function lineOfPatients(line) {
      if (!line.length) {
        return "Empty"
      }
      var returnString = "The line is currently: "
      for(let i = 0; i < line.length; i++) {
        let patient = ` ${i + 1}. ${line[i]},`;
        returnString += patient;
      }
      return returnString;
    }
    

    【讨论】:

      【解决方案5】:

      这就是你想要的。 (被代码高尔夫迷住了)

      const patients = ["Julia", "Kelly", "Thomas", "Clare"]
      
      const lineOfPatients = (line) => "The line is currently: " + (!line || !line.length) ? "Empty" : line.map((patient, idx) => `${idx + 1}. ${patient}`).join(', ')
      
      console.log(lineOfPatients(patients))
      

      它不起作用的原因是您在每个循环中都重新声明了变量list。即使您将其移出循环,您也不会附加 for 循环的输出,而是分配它。它始终是最后一个循环的输出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-15
        相关资源
        最近更新 更多