2017-04-12 74 views
0

我希望我的循环打印出数组中的每一项,而不仅仅是最后一项。无法弄清楚我要去哪里错了:用于循环打印出我阵列中的最后一项

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克莱尔,”

我希望它返回“该生产线是目前:1,朱莉娅,2 Kelly,3. Thomas,4. Clare“

+3

将'list'初始化为'“”'',然后使用'list + = ...'而不是'list = ...' – mhodges

回答

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))

+1

这是最好的解决方案,IMO – mhodges

+0

@mhodges,谢谢队友! –

+0

两全其美,不错。 – Lewis

0

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

var list = new Array(); 

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

list[i] = ..... 
+1

字符串连接在这里就足够了 – mhodges

+0

是真的。我想这取决于他们想要对物品做什么。如果它只是印刷品,那么是的。否则,将它们分开是有帮助的。 – Lewis

+1

同意 - 应该是'新阵列()'或'[]'虽然 – mhodges

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))

1

与您的代码的问题是,您的for循环的每次迭代,你redeclare 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; 
} 
0

这里有你想要的。 (GOT冲昏头脑代码高尔夫球)

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循环的输出附加到您的分配中。它将始终是最后一个循环的输出。