我有一个要遍历的值数组,并分配一个从1开始的数值。如果相同的值再次出现在数组中,我想在第一个值后附加字母A。如果再次出现,我想将其后附加字母B。例如:
myArray=[12,15,6,9,11,14,25,6,13,17,6]
预期输出应为>>
1
2
3
4
5
6
7
3A
8
9
3B
答案 0 :(得分:1)
您可以使用字典来做到这一点。
保留一个计数变量,该变量对您到目前为止已访问的唯一字符进行计数,然后保留一个字典,其中key是实际数字,而value是到目前为止分配的数字和该key的元组。
如果可以展示自己的实现,则可以为您提供更好的帮助。
答案 1 :(得分:0)
这样的事情应该使用两个映射来工作,一个映射用于跟踪元素首次出现的索引,另一个映射用于计算元素先前出现过多少次:
const assignChar = arr => {
let result = new Array(arr.length)
let firstOccurenceIndex = {}
let occurrenceCountMap = {}
let runningIndex = 1
arr.forEach((element, index) => {
if (firstOccurenceIndex[element]) {
const c = String.fromCharCode('A'.charCodeAt(0) + occurrenceCountMap[element] - 1)
result[index] = firstOccurenceIndex[element] + c
} else {
firstOccurenceIndex[element] = runningIndex++
result[index] = firstOccurenceIndex[element]
}
occurrenceCountMap[element] = (occurrenceCountMap[element] || 0) + 1
})
return result
}
const myArr = [12, 15, 6, 9, 11, 14, 25, 6, 13, 17, 6]
console.log(assignChar(myArr))