如何将重复的数字转换为对应的数字字母对?

我有一组定义步骤的数字。我想将其转换为人类可读的格式,以便只有重复的步骤才用字母“编号”。


这是一个例子:


0 => 'Step 1A'

0 => 'Step 1B'

0 => 'Step 1C'

1 => 'Step 2'

2 => 'Step 3A'

2 => 'Step 3B'

3 => 'Step 4'

这是我尝试过的:


let steps = [0, 0, 0, 1, 1, 2, 3, 4, 5, 5]

let stepCount = new Map()


steps = steps.map(step => {

  stepCount[step] = stepCount[step] + 1 || 0

  return 'Step ' + (step+1) + String.fromCharCode(65 + stepCount[step])

})


console.log(steps)

.as-console-wrapper { max-height: 100% !important; top: 0; }


凤凰求蛊
浏览 114回答 2
2回答

当年话下

您可以拿一个物体来跟踪步骤。要获取一封信,您可以使用toString基数 36。let steps = [0, 0, 0, 1, 1, 2, 3, 4, 5, 5],    stepCount = {};steps = steps.map((step, i, a) => {    if (step !== a[i - 1] && step !== a[i + 1]) return 'Step ' + (step + 1);    stepCount[step] = stepCount[step] || 0;    return 'Step ' + (step + 1) + (stepCount[step]++ + 10).toString(36).toUpperCase();});console.log(steps);.as-console-wrapper { max-height: 100% !important; top: 0; }

明月笑刀无情

使用Array.reduce,您可以获得重复项的计数,并根据该数据,可以得到如下结果。let steps = [0, 0, 0, 1, 1, 2, 3, 4, 5, 5]const groupBy = steps.reduce((acc, cur) => {  acc[cur] ? acc[cur] ++ : acc[cur] = 1;  return acc;}, {});const output = Object.entries(groupBy).flatMap(([ step, count ]) => {  return count === 1 ? `Step ${+step + 1}` : Array.from({length: count}, (_, i) => i).map((index) => `Step ${+step + 1}${String.fromCharCode(65 + index)}`);});console.log(output);.as-console-wrapper { max-height: 100% !important; top: 0; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript