You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建排行榜:变量抓取、排序与赋值问题技术求助

解决排行榜计分板的排序与变量赋值问题

咱们先拆解你代码里的几个关键问题,一步步调整就能实现需求啦:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:01:36