如何根据字符在数组中重复的次数分配字符

时间:2019-05-20 21:55:28

标签: javascript arrays loops

我有一个要遍历的值数组,并分配一个从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

2 个答案:

答案 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))