有没有办法改变参数的顺序?

Is there any way to change the order of arguments?

我正在研究一个搜索游戏 osu 地图的命令!在网站 bloodcat.com 上,我找到了一种过滤地图的方法:

.split('status=ranked').join('&c=b&s=1&m=&g=&l=')
.split('status=approved').join('&c=b&s=2&m=&g=&l=')
.split('status=qualified').join('&c=b&s=3&m=&g=&l=')
.split('status=loved').join('&c=b&s=4&m=&g=&l=')
.split('status=unranked').join('&c=b&s=0&m=&g=&l=')
.split('status=graveyarded').join('&c=b&s=0&m=&g=&l=');

现在有人可以做 !search 'map name' status=unranked,那会寻找 https://bloodcat.com/osu/?mod=json&q='map name'&c=b&s=0&m=&g=&l=,但是如果有人做,例如 !search status=unranked 'map name',那是行不通的,有什么办法吗? 即使用户没有把它放在命令的最后,我也可以把 status=unranked 放在最后吗?

我会这样做:首先,检查参数字符串是否以 status= 开头。如果是这样,您需要切换它们,否则,它应该像现在一样工作。
为了切换这些,我会用空格分割字符串,删除第一个参数(status=*),用空格重新加入它并添加删除的部分:

function getQueryURL(argStr = "") { // argStr should be like "'map name' status=unranked" OR "status=unranked 'map name'"
  if (argStr.startsWith('status=')) {
    let arr = argStr.split(' ');
    let removed = arr.shift();
    argStr = arr.join(' ').trim() + removed.trim();
  }

  let res = argStr.split('status=ranked').join('&c=b&s=1&m=&g=&l=')
    .split('status=approved').join('&c=b&s=2&m=&g=&l=')
    .split('status=qualified').join('&c=b&s=3&m=&g=&l=')
    .split('status=loved').join('&c=b&s=4&m=&g=&l=')
    .split('status=unranked').join('&c=b&s=0&m=&g=&l=')
    .split('status=graveyarded').join('&c=b&s=0&m=&g=&l=');

  return "https://bloodcat.com/osu/?mod=json&q=" + res;
}