如何将动态获取的公司名称映射为预定义编码并生成TSE交易所详情链接

7次阅读

如何将动态获取的公司名称映射为预定义编码并生成TSE交易所详情链接

本文详解如何在javascript中通过键名(如公司名称)安全访问常量对象中的数值编码,解决括号变量(如`(l18)`)导致的语法错误,并构建合法的tse交易所详情url。重点涵盖方括号属性访问、大数字符串化处理及双向映射技巧。

在使用伊朗德黑兰证券交易所(TSE)旧版页面(如 https://old.tsetmc.com/Loader.aspx?ParTree=15131F)时,前端常通过 javaScript 变量(如 (l18))动态获取公司名称(例如 “آبادا”)。目标是将该名称精准匹配到你预先定义的 StockCodes 常量中,并提取对应数字编码(如 “37661500521100963”),最终拼接成标准详情页链接:
https://www.tsetmc.com/InstInfo/37661500521100963

⚠️ 关键误区澄清:

  • ❌ StockCodes.(l18) 是非法语法——javascript 不允许用圆括号包裹标识符作点号访问(.),这会直接抛出 TypeError: Cannot read Property ‘…’ of undefined
  • String.fromCodePoint(StockCodes) 完全错误——fromCodePoint() 用于 Unicode 码点转字符,与对象取值无关。
  • ❌ StockCodes.includes(…) 失败——includes() 是数组方法,StockCodes 是对象,不支持该调用。

✅ 正确方案:使用方括号表示法(Bracket Notation) 动态访问对象属性:

const StockCodes = {   "آبادا": ["37661500521100963"],   "آپ": ["55254206302462116"],   "آسيا": ["51106317433079213"] };  // ✅ 正确:用方括号访问,且确保 l18 是字符串(去除括号、空格等) const l18 = "(آبادا)"; // 实际可能带括号或空格 const cleanName = l18.replace(/[()]/g, "").trim(); // → "آبادا"  if (StockCodes.hasOwnProperty(cleanName)) {   const code = StockCodes[cleanName][0]; // 提取数组首项(字符串形式)   const finalLink = `https://www.tsetmc.com/InstInfo/${code}`;   console.log(finalLink); // https://www.tsetmc.com/InstInfo/37661500521100963 } else {   console.warn(`未找到公司 "${cleanName}" 的编码`); }

? 重要注意事项

  • 大整数必须用字符串存储:JavaScript 安全整数上限为 2^53 – 1(约 9e15),而 TSE 编码(如 55254206302462116)已超出范围,若存为数字会导致精度丢失(如 55254206302462116 → 55254206302462120)。务必统一使用字符串(如 “55254206302462116”)。
  • 健壮性处理:实际 (l18) 可能含空格、全角括号、不可见字符,推荐用 l18.trim().replace(/[uFEFFu200B-u200Du2060uFEFF]/g, ”).replace(/[()()]/g, ”) 做清洗。
  • 空值防御:始终检查 StockCodes[cleanName] 是否存在,避免 undefined[0] 报错。

? 进阶:双向映射(名称 ↔ 编码)
若还需根据编码反查公司名(例如解析 URL 中的 ID),可构建反向映射对象:

const StockCodesInverse = Object.fromEntries(   Object.entries(StockCodes).map(([name, [code]]) => [code, name]) ); // → { "37661500521100963": "آبادا", ... }  const idFromUrl = "55254206302462116"; const companyName = StockCodesInverse[idFromUrl] || "未知公司"; console.log(companyName); // "آپ"

? 总结:核心在于摒弃点号访问思维,拥抱方括号动态键访问;坚持字符串化大数;强化输入清洗与存在性校验。此模式可稳定支撑数百家公司的实时链接生成,适用于自动化行情监控、爬虫跳转或浏览器插件开发。

text=ZqhQzanResources