2017-04-12 100 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循環的輸出附加到您的分配中。它將始終是最後一個循環的輸出。