一个含有字符串的数组,例如:[“a”,“b”,“a”,“c”,“b”,“d”,“a”,1,1],
需要得到一个新数组 ["a1","b1","a2","c","b2","d","a3","11","12"]
要求: 未重复的元素不处理 重复的元素加上编号 不能影响正常数组的顺序
var arr = ["a", "b", "a", "c", "b", "d", "a", 1, 1]
// var arr = ["a1", "b1", "a2"]
// 用这个数组 维护所有 重复元素的 索引 , 以及第几次出现
var mark = []
// var mark = [{ index: 0, num: 1 }, { index: 2, num: 2 }]
// 利用对象的特性 判断元素是否重复出现
var obj = {
}
arr.forEach((item, i) => {
// 确定 数组内元素 是否重复
if (obj[item] == undefined) {
// 说明元素就是第一次 出现
// 暂存到 obj 对象中
obj[item] = {
index: i,
num: 1
}
} else {
// 至少是第二次出现了
// 先把 对应元素 第一次出现的 记录 放到数组中 维护
if (obj[item].num == 1) {
mark.push({
index: obj[item].index,
num: obj[item].num
})
}
obj[item].index = i
obj[item].num++
mark.push({
index: obj[item].index,
num: obj[item].num
})
}
})
console.log(obj)
console.log(mark)
mark.forEach(item => {
arr[item.index] += "_" + item.num
})
console.log(arr)
</script>