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

Angular+TS生成含所有单词字符的唯一编码需求

编码生成工具优化实现(Angular+TS)

问题现状

当前实现的编码生成逻辑存在缺陷:输入「Project Tracker Tool & Category Beta (BET)」时,输出为PROTTERTBET这类结果,因仅截取前8字符导致「Tool」这类单词完全未被包含,不符合业务需求。

需求明确

  • 每个单词至少保留1个字符
  • 字符严格遵循原输入顺序,不打乱
  • 主体编码(itemName部分)最多8字符,可按单词分配字符数(如3+3+2的组合)
  • 短输入(如「Tool」)直接使用全词
  • 6字符单词(如MyItem)可保留全词或缩写为MYITM
  • 支持生成多种不同输出结果(例如「Project Tracker Tool」可输出PRJTRTOL或PJCTTKTL)

实现方案

以下是符合需求的TS工具函数,可直接在Angular项目中使用:

// 编码生成工具函数
export function generateCode(input: string): string {
  // 拆分主体名称与标签(过滤&、()等分隔符)
  const parts = input.split(/[&()]/).map(part => part.trim()).filter(Boolean);
  const mainPart = parts[0] || '';
  const tagPart = parts[1] || '';
  
  // 提取主体单词列表
  const words = mainPart.split(/\s+/).filter(word => word.length > 0);
  if (words.length === 0) return '';

  const maxMainLength = 8;
  let remainingChars = maxMainLength;
  
  // 初始化:每个单词至少分配1个字符
  const charAllocations = words.map(() => {
    remainingChars--;
    return 1;
  });

  // 随机分配剩余字符,实现多结果输出
  while (remainingChars > 0) {
    // 筛选还能扩展字符的单词(当前分配数 < 单词长度)
    const eligibleIndices = charAllocations
      .map((alloc, idx) => alloc < words[idx].length ? idx : -1)
      .filter(idx => idx !== -1);
    
    if (eligibleIndices.length === 0) break;
    
    const randomIdx = eligibleIndices[Math.floor(Math.random() * eligibleIndices.length)];
    charAllocations[randomIdx]++;
    remainingChars--;
  }

  // 按分配数提取字符并拼接
  const mainCode = words.map((word, idx) => 
    word.slice(0, charAllocations[idx]).toUpperCase()
  ).join('');

  // 拼接标签部分(如果存在)
  return tagPart ? `${mainCode}${tagPart.toUpperCase()}` : mainCode;
}

// 测试用例
console.log(generateCode('Project Tracker Tool')); // 输出示例:PRJTRTOL / PJCTTKTL
console.log(generateCode('Tool')); // 输出:TOOL
console.log(generateCode('MyItem')); // 输出示例:MYITEM / MYITM
console.log(generateCode('Project Tracker Tool & Category Beta (BET)')); // 输出示例:PRJTRTBET / PJCTTLBET

关键逻辑说明

  1. 输入拆分:将主体名称与括号、&分隔的标签分离,避免标签占用主体的字符配额
  2. 字符分配:先保证每个单词至少1个字符,剩余字符随机分配给可扩展的单词,满足多结果生成需求
  3. 字符提取:严格按原单词顺序截取字符,确保输出顺序与输入一致
  4. 边界处理:短单词直接取全词,6字符单词可随分配逻辑保留全词或缩写

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:57:15