为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

凤凰求蛊 2023-08-18 17:16:44
我有一组定义步骤的数字。我想将其转换为人类可读的格式,以便只有重复的步骤才用字母“编号”。这是一个例子: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; }
查看完整描述

2 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

您可以拿一个物体来跟踪步骤。


要获取一封信,您可以使用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; }


查看完整回答
反对 回复 2023-08-18
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

使用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; }


查看完整回答
反对 回复 2023-08-18
  • 2 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信