创建排行榜:变量抓取、排序与赋值问题技术求助
解决排行榜计分板的排序与变量赋值问题
咱们先拆解你代码里的几个关键问题,一步步调整就能实现需求啦:
1. 排序函数逻辑错误
你当前的sort回调返回的是布尔值,这会导致排序结果完全不符合预期。JavaScript的Array.sort()要求回调返回数值:
- 返回负数:让a排在d前面
- 返回正数:让d排在a前面
- 返回0:保持两者位置不变
要实现高分到低分的降序排序,正确写法应该是:
Sc.sort(function(a, d) { return d - a; // 降序逻辑:大数值优先排前面 });
2. 对象键名大小写不匹配
你创建variable_names时用的是小写开头的键sc_0、sc_1,但赋值时却写了Sc_0(大写S)——对象键名是区分大小写的,这会导致你根本取不到对应的值。要保持键名完全一致:
// 赋值时用小写的sc_开头 $Variables.setValue(397, variable_names.sc_0); $Variables.setValue(398, variable_names.sc_1); $Variables.setValue(399, variable_names.sc_2); $Variables.setValue(400, variable_names.sc_3);
3. 优化后的完整代码
把这些修正整合后,完整可运行的代码如下:
// 读取原始变量值 var Sc = [ $Variables.value(461), $Variables.value(464), $Variables.value(467), $Variables.value(470), $Variables.value(473), $Variables.value(476), $Variables.value(479), $Variables.value(482) ]; // 按高分到低分降序排序 Sc.sort(function(a, d) { return d - a; }); // 存储排序后的分数(可选步骤) var variable_names = {}; for(var i = 0; i < Sc.length; i++){ variable_names['sc_'+i] = Sc[i]; } // 赋值给新变量(键名大小写与定义一致) $Variables.setValue(397, variable_names.sc_0); $Variables.setValue(398, variable_names.sc_1); $Variables.setValue(399, variable_names.sc_2); $Variables.setValue(400, variable_names.sc_3);
额外简化建议
其实你可以跳过variable_names对象,直接用数组索引赋值,代码会更简洁:
// 排序后直接通过数组索引赋值 $Variables.setValue(397, Sc[0]); $Variables.setValue(398, Sc[1]); $Variables.setValue(399, Sc[2]); $Variables.setValue(400, Sc[3]);
这样就完美实现了「读取变量→降序排序→赋值给新变量」的需求啦!
内容的提问来源于stack exchange,提问作者Michael Purnell
相关产品推荐
相关产品推荐

