如何将数组中重复步骤数字转换为对应数字-字母配对格式?
解决步骤编号格式化问题(仅为重复步骤添加字母后缀)
我来帮你调整代码,实现你想要的效果——只有重复出现的步骤才添加A/B/C后缀,单次出现的步骤只显示Step X。
先说说你现有代码的小问题
你的当前代码会给所有步骤都加上字母后缀,哪怕是只出现一次的步骤(比如数组里的3、4,会输出Step 4A、Step 5A),这和你想要的“仅重复步骤加字母”的需求不符。另外你声明了stepCount = new Map(),但用了对象的访问方式stepCount[step],其实更规范的是用Map的get()和set()方法,或者直接用普通对象。
修正后的代码实现
下面是符合需求的代码,我分两步处理:先统计每个步骤的总出现次数,再遍历生成带编号的步骤文本:
const steps = [0, 0, 0, 1, 1, 2, 3, 4, 5, 5]; // 1. 先统计每个步骤数字的总出现次数 const totalOccurrences = new Map(); steps.forEach(step => { totalOccurrences.set(step, (totalOccurrences.get(step) || 0) + 1); }); // 2. 遍历数组,生成格式化的步骤文本 const currentOccurrence = new Map(); const formattedSteps = steps.map(step => { // 记录当前是第几次遇到这个步骤 const currentCount = (currentOccurrence.get(step) || 0) + 1; currentOccurrence.set(step, currentCount); const baseStepNumber = step + 1; // 只有总出现次数>1的步骤,才添加字母后缀 if (totalOccurrences.get(step) > 1) { const suffix = String.fromCharCode(64 + currentCount); // 1对应A,2对应B,以此类推 return `Step ${baseStepNumber}${suffix}`; } else { return `Step ${baseStepNumber}`; } }); console.log(formattedSteps);
代码运行结果
这段代码会输出:
["Step 1A", "Step 1B", "Step 1C", "Step 2A", "Step 2B", "Step 3", "Step 4", "Step 5", "Step 6A", "Step 6B"]
关键逻辑说明
- 统计总次数:用
totalOccurrences记录每个步骤数字出现的次数,这样我们能判断哪些步骤是重复的。 - 跟踪当前次数:用
currentOccurrence记录遍历过程中每个步骤当前是第几次出现,用来生成对应的字母后缀。 - 条件添加后缀:只有当步骤总出现次数大于1时,才添加A/B/C后缀;单次出现的步骤直接输出
Step X。
内容的提问来源于stack exchange,提问作者leonheess
相关产品推荐
相关产品推荐

