我正在使用 Node.js、Express 和 Socket.io 構建一個小的字鏈回合制游戲。通過這個功能,玩家和他們的分數會顯示出來,每回合重繪 一次:
function updatePlayersList(players) {
const players_list = document.getElementById('players_list');
players_list.innerHTML = players.map(player => `<li id="${player.id}">${player.name} - ${player.score}</li>`).join('');
}
這是players陣列:
[
{
id: 'opYbiuXzExmymRPvAAAV',
name: 'Paul',
score: 0,
room: 'room',
playing: true
},
{
id: 'uvs4wxpZwsmaQ3G4AAAX',
name: 'Ezio',
score: 0,
room: 'room',
playing: true
}
]
哪個作業正常并顯示這個。輪到玩家的名字帶有邊框。這是一個只有兩個玩家但可以玩更多的游戲。
在這個想法中,我想打擊在比賽中輸掉的球員的名字。他們的名字仍然被顯示出來,所以每個人都知道誰還在誰在外面,但他們顯然不能再玩了,繼續看。
所以我在考慮 map 函式中的 if 陳述句.not-playing,為玩家的名字添加一個類playing: false(每回合后在服務器端更新)。但無論哪種方式我都做錯了,還是我必須使用其他東西?這是修改后的代碼,但是沒有更多的玩家被顯示,無論是玩游戲還是不玩游戲。顯然不是我想要的。
players_list.innerHTML = players.map(player => {
if (player.playing) {
`<li id="${player.id}">${player.name} - ${player.score}</li>`
} else {
`<li id="${player.id}" >${player.name} - ${player.score}</li>`
}
}).join('');
我也嘗試過forEach回圈但得到了相同的結果。
uj5u.com熱心網友回復:
在修改后的代碼中,您不會從map呼叫中回傳任何內容。只要不打開大括號,就會隱式回傳映射到的值(這是 JavaScript 為您提供的一些語法糖),但是一旦打開一個塊,就需要顯式地從中回傳:
players_list.innerHTML = players.map(player => {
if (player.playing) {
return `<li id="${player.id}">${player.name} - ${player.score}</li>`;
} else {
return `<li id="${player.id}" >${player.name} - ${player.score}</li>`;
}
}).join('');
uj5u.com熱心網友回復:
做地圖時你應該回傳一些東西。
uj5u.com熱心網友回復:
我不確定你的 forEach 是什么樣子,但我想我得到了你正在尋找的功能:
players.forEach(player => {
if (player.playing) {
players_list.innerHTML = `<li id="${player.id}">${player.name} - ${player.score}</li>`
} else {
players_list.innerHTML = `<li id="${player.id}" >${player.name} - ${player.score}</li>`
}
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386032.html
標籤:javascript 数组 字典 foreach
下一篇:如何過濾具有多個值的陣列?|反應
