我希望我的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”
答案 0 :(得分:2)
您可以在join
数组上调用包含您的行的lines
方法。
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;
答案 1 :(得分:1)
您的问题是,每次循环都会重新分配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))
&#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的输出,你可以分配它。它始终是最后一个循环的输出。