如何将数组前3名高分按降序存入不同文本框?附代码
解决方法
先修正原代码问题,再实现需求:
- 函数名拼写错误:
fucntion→function - 排序逻辑:要明确指定降序排序,默认排序是升序,会导致取到最低分
- 循环语法错误:
for循环的条件分隔符是分号,不是逗号 - 文本框赋值:需根据索引分别给
score1、score2、score3赋值,不能重复取数组第一个元素
情况1:数组存储纯分数数值
如果top3Array直接存的是分数数值,修正后的代码:
var top3Array:Array = []; // 计算分数并加入数组 var totalScore = int((numeratorCounter/denominatorCounter)*100)/100; top3Array.push(totalScore); function scoreBoard(): void{ // 降序排序:b - a 实现从高到低排列 top3Array.sort(function(a, b) { return b - a; }); // 给前3个文本框赋值,判断数组长度避免越界 if(top3Array.length >= 1) { count1.text = "1"; score1.text = String(top3Array[0]); } if(top3Array.length >= 2) { count2.text = "2"; score2.text = String(top3Array[1]); } if(top3Array.length >= 3) { count3.text = "3"; score3.text = String(top3Array[2]); } }
情况2:数组存储含totalScore属性的对象
如果top3Array里是带属性的对象(比如{totalScore: 92.5}),用sortOn()的写法:
var top3Array:Array = []; // 创建分数对象并加入数组 var scoreObj = { totalScore: int((numeratorCounter/denominatorCounter)*100)/100 }; top3Array.push(scoreObj); function scoreBoard(): void{ // 按totalScore字段降序排序 top3Array.sortOn("totalScore", Array.DESCENDING); // 赋值文本框 if(top3Array.length >= 1) { count1.text = "1"; score1.text = String(top3Array[0].totalScore); } if(top3Array.length >= 2) { count2.text = "2"; score2.text = String(top3Array[1].totalScore); } if(top3Array.length >= 3) { count3.text = "3"; score3.text = String(top3Array[2].totalScore); } }
关键提示
- 必须指定降序规则,否则排序结果会是从低到高,无法取到高分
- 加入数组长度判断,防止数组元素不足3个时出现索引越界报错
- 原代码中
count变量未定义,直接使用排名数字1、2、3更合理
内容的提问来源于stack exchange,提问作者Isaac Yeap Jie Ling
相关产品推荐
相关产品推荐

