我正在开发一个MOBA英雄计数器应用程序,我需要为一个团队找到一个英雄的常见计数器。
我有这样的东西:
[
{
"counters": [{"name": "a"}, {"name": "b"}, {"name": "k"}]
},
{
"counters": [{"name": "a"}, {"name": "b"}, {"name": "y"}]
},
{
"counters": [{"name": "a"}, {"name": "b"}, {"name": "c"}]
},
{
"counters": [{"name": "a"}, {"name": "g"}, {"name": "f"}]
},
{
"counters": [{"name": "x"}, {"name": "z"}, {"name": "y"}]
}
]
我需要做的是找出最常见的具有相同name属性的计数器,并将它们显示在列表的顶部。因此,如果name: "a"
重复3次,我希望能够按它排序并将其显示在列表的顶部。
问题是,我不知道如何做到这一点。有人能帮我吗?
这是我目前所掌握的情况:
const generateCounters = (hero) => {
const positiveCounters = hero.counters.filter((counter) => parseFloat(counter.disadvantage.replace('%', '')) >= 0.00);
return positiveCounters.map(counter => {
return (
<div className="relative-el">
<img className="hero-image" src={`/assets/images/${replaceHeroName(counter.name)}.png`} alt="" width={86} />
<p className="absolute-statistic">{counter.disadvantage}</p>
</div>
);
});
}
const renderCounters = () => {
return activeHeroes.map(hero => {
return (
<div className="hero-counters-container">
<div className="relative-el header-hero">
<img className="hero-image" src={`/assets/images/${hero.heroName.replaceAll(' ', "-").replace("'", "").toLowerCase()}.png`} alt="" width={86} />
</div>
<div className="counters-list">
{generateCounters(hero)}
</div>
</div>
);
});
}
编辑:activeHeroes
是保存上述json结构的变量。
1条答案
按热度按时间lqfhib0f1#
我 * 认为 * 这是你想要的。我不得不改变你的输入数据,因为你的输入和你想要的输出是一样的,所以改变是不可见的。我相信它应该在
render
中的activeHeros .map
调用之前运行。第一个
这里我们有一个函数
sortCounters
,它接受一个heros(?)数组,即具有counters
数组属性的对象,其中包含具有name
属性的项。我们使用countBy
帮助器创建一个索引,如下所示:然后我们复制每个英雄,根据列表中的计数对其计数器进行排序。如果它们相同,我们不在乎,但大多数(所有?)现代JS引擎实现了一个稳定的排序,这意味着如果它们都相同,它们不会被重新排序。如果需要,我们可以很容易地添加一个按名称或其他方式的二级排序。