【发布时间】:2020-10-12 12:22:51
【问题描述】:
我有一个存储一系列分数的一维数组。我的最终目标是获得 5 个最高分,并用括号括起来(例如 (score) ),然后我可以格式化并输出到显示器上。在有重复分数的情况下,第一次出现的值将被括起来,最多为前 5 个值。
例如: [9,8,10,9,6,8,6,5,4,4,3,3,6] 将变为 [(9),(8),(10),(9),6,(8 ),6,5,4,4,8,3,8]
到目前为止我尝试过的是:
var topvals = scores.sort((a,b) => b-a).slice(0,5);
for(var j=0; j< scores.length; j++){
if(topvals.length==0){
break;
}else if(topvals.includes(scores[j])){
scores[j] = "(" + scores[j] + ")";
topvals.splice(topvals.indexOf(scores[j]),1);
}
}
考虑到 topvals 是一个包含前 5 个值的数组,然后我循环遍历分数以查找这些值,每次都将它们删除。
这会导致前 5 个分数的值被括号括起来。
我很高兴为此走一条完全不同的路线,或者只是修复我到目前为止所做的事情。提前致谢。
【问题讨论】:
-
只是克隆分数。 scoreclone = score.slice()
-
很遗憾没有。该帖子仅涉及编辑您知道值在哪里的数组。我遇到的问题是帖子中描述的内容。
-
在你的例子中
dvals应该是topvals吗?您还可以解释您遇到的错误/意外行为吗? -
这需要多高效?最简单的方法是
scores.map((n,i)=>({n,i})).sort((a,b)=>b.n-a.n).slice(0,5).map(({i})=>i).forEach(i=>scores[i]=`(${scores[i]})`)。如果大型数据集需要 O(N),则可以使用数据透视算法。
标签: javascript arrays