簡體   English   中英

我如何渲染列表中的 2 個玩家,他們有相同的點數,處於相同的水平,例如第二個?

[英]How can I render 2 players of a list, that have the same points, at the same level, e.g. both second?

在排行榜中,我遇到了上述問題。 我呈現一個列表,我根據他們的分數對玩家進行排序。 然后我使用index + 1渲染它們以在列表中獲取它們的 position。 但在平等的情況下,一個獲得第二,另一個獲得第三等。

首先,我雖然可能對每個玩家都有一個索引,但這會有點矯枉過正,因為每次一個玩家改變他們的分數,我也必須改變其他玩家的索引,以調整更新的列表。

我想,我需要一些檢查點的東西,如果它們與以下玩家相同,則分配相同的索引。 然后,如果后面的玩家得分較少,則將指數減去得分相同的玩家數量,並將結果作為他的指數。

這是一個好的解決方案嗎?

如果有人願意提供幫助,我這里有一個最小的可重現示例。

謝謝

這是我所做的。 我取出排序后的列表並遍歷它並檢查上一個值是否與迭代中的當前值相同。 如果相同則position不用加,不同則position加1。

https://codesandbox.io/s/players-with-same-points-forked-lkhcu6

您可以count有多少人比玩家擁有更多的分數,而該玩家的 position 就是count + 1 您需要對每個玩家進行額外計數,但如果列表不是很大,這可能是一個解決方案。 例如:

 let players = [ { name: "John", points: 4 }, { name: "Bill", points: 3 }, { name: "Mark", points: 4 }, { name: "Helen", points: 2 }, { name: "Mary", points: 10 } ]; const list = players.sort((a, b) => (a.points < b.points? 1: -1)); function countPlayersMithMorePoints(points){ return players.filter(player => player.points > points).length + 1; } players = players.map(player => { return {...player, position: countPlayersMithMorePoints(player.points) } }) console.log(players)

所以在這種情況下。 “Mark”和“Jhon”有 4 分……所以都排在第二位。 海倫排在第四位。 沒有第三個地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM