You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用JavaScript实现将玩家信息数组写入players.txt文件

解决前端导出排序后玩家列表为players.txt的问题

嘿,看来你已经完成了大部分核心逻辑——提取玩家信息、匹配排名、排序数组,就差最后一步导出成txt文件啦!我来给你补上这部分代码,顺便把完整流程串起来,让你直接能用。

完整实现代码

先给你看包含导出功能的完整代码,后面再拆解关键部分:

// 示例standing JSON数据(替换成你实际的数据源)
const standing = [
  { code: "Y1", rank: 2 },
  { code: "Y2", rank: 1 },
  { code: "Y3", rank: 3 }
];

// 1. 从输入框提取玩家姓名和对应类别
const players = [];
for (let i = 1; i <= 3; i++) {
  const input = document.getElementById(`P${i}`);
  if (input) {
    const name = input.value.trim();
    // 这里假设每个输入框所在的.block容器有对应类别class(比如Y1),根据你的HTML结构调整
    const playerClass = input.closest('.block').classList.contains('Y1') ? 'Y1' : 
                        input.closest('.block').classList.contains('Y2') ? 'Y2' : 'Y3';
    if (name) {
      players.push({ name, class: playerClass });
    }
  }
}

// 2. 匹配standing中的rank值
const playersWithRank = players.map(player => {
  const matchedStanding = standing.find(s => s.code === player.class);
  return {
    ...player,
    rank: matchedStanding ? matchedStanding.rank : 999 // 未匹配到的玩家设为高排名
  };
});

// 3. 按rank升序、name升序排序
playersWithRank.sort((a, b) => {
  if (a.rank !== b.rank) {
    return a.rank - b.rank;
  }
  return a.name.localeCompare(b.name);
});

// 4. 核心:导出为players.txt文件的函数
function exportToTxt(sortedPlayers) {
  // 将排序后的玩家姓名转成|分隔的字符串(比如"Jim|Paul|Bob")
  const txtContent = sortedPlayers.map(player => player.name).join('|');
  // 创建Blob对象存储文本内容
  const blob = new Blob([txtContent], { type: 'text/plain' });
  // 生成临时下载链接
  const downloadUrl = URL.createObjectURL(blob);
  // 创建隐藏的a标签触发下载
  const downloadLink = document.createElement('a');
  downloadLink.href = downloadUrl;
  downloadLink.download = 'players.txt'; // 指定下载文件名
  // 触发点击并清理资源
  document.body.appendChild(downloadLink);
  downloadLink.click();
  document.body.removeChild(downloadLink);
  URL.revokeObjectURL(downloadUrl); // 释放临时URL资源
}

// 调用导出函数
exportToTxt(playersWithRank);

关键部分解释

  1. Blob对象:用来在前端创建二进制数据文件,这里我们把|分隔的字符串转成纯文本格式的Blob。
  2. 临时下载链接:通过URL.createObjectURL生成Blob的临时访问地址,让a标签可以指向这个地址。
  3. 自动触发下载:创建隐藏的a标签,设置好文件名后模拟点击,浏览器就会自动下载players.txt文件。
  4. 资源清理:下载完成后要移除a标签并释放临时URL,避免内存泄漏。

注意事项

  • 如果你获取玩家类别的方式不对(比如类别不是存在.block容器的class里),需要根据你的实际HTML结构调整playerClass的获取逻辑,比如直接取输入框自身的class。
  • 如果输入框可能为空,代码里已经通过trim()和判断过滤了空值,避免导出空名字。

内容的提问来源于stack exchange,提问作者verlager

火山引擎 最新活动