for循环打印出我的数组中的最后一项

时间:2017-04-12 19:36:38

标签: javascript arrays for-loop

我希望我的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”,

我希望它能够回归“The line is current:1。Julia,2。Kelly,3。Thomas,4。Clare”

5 个答案:

答案 0 :(得分:2)

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

&#13;
&#13;
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))
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您的问题是,每次循环都会重新分配list变量,因此您将覆盖之前的值。

要避免这种情况,请使用+=运算符代替=运算符,如下所示:

&#13;
&#13;
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))
&#13;
&#13;
&#13;

答案 2 :(得分:1)

您的代码的问题在于,对于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;
}

答案 3 :(得分:0)

var list正在循环中声明。这意味着在每次迭代时都会使用新值重新创建它。在循环外部将此变量声明为数组。 E.g,

var list = new Array();

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

list[i] = .....

答案 4 :(得分:0)

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

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-loop的输出,你可以分配它。它始终是最后一个循环的输出。