Javascript 在数组中查找重复字符串并修改它们
我有一个巨大的字符串数组,这里是它的一小部分:Javascript 在数组中查找重复字符串并修改它们,javascript,arrays,duplicates,Javascript,Arrays,Duplicates,我有一个巨大的字符串数组,这里是它的一小部分: let x = [ 'FireDisaster_03_', 'FireDisaster_03_', 'FireDisaster_03_', 'FireDisaster_05_', 'FireDisaster_05_', 'FireDisaster_07_', 'FireDisaster_07_', 'FireDisaster_07_', 'FireDisaster_07_', 'FireDi
let x = [
'FireDisaster_03_',
'FireDisaster_03_',
'FireDisaster_03_',
'FireDisaster_05_',
'FireDisaster_05_',
'FireDisaster_07_',
'FireDisaster_07_',
'FireDisaster_07_',
'FireDisaster_07_',
'FireDisaster_08_',
'FireDisaster_08_',
'FireDisaster_08_'
]
我需要为每个重复的字符串添加序列号。这样,结果将如下所示:
[
'FireDisaster_03_0',
'FireDisaster_03_1',
'FireDisaster_03_2',
'FireDisaster_05_0',
'FireDisaster_05_1',
'FireDisaster_07_0',
'FireDisaster_07_1',
'FireDisaster_07_2',
'FireDisaster_07_3',
'FireDisaster_08_0',
'FireDisaster_08_1',
'FireDisaster_08_2'
]
请帮我解决这个问题
谢谢你你可以拿一个物体作为所看到的值并存储计数器 这种方法使用带有IIFE()的
seen
上的闭包和一个检查键是否存在于对象中的表达式
在第一种情况下,它从属性中获取值并添加一个值;在第二种情况下,它将零作为赋值给属性的值,同时该值用于与字符串连接
设x=['firefaster\u 03\u'、'firefaster\u 03\u'、'firefaster\u 03\u'、'firefaster\u 05\u'、'firefaster\u 07\u'、'firefaster\u 07\u'、'firefaster\u 08\u'、'firefaster\u 08\u'],
结果=x.map(
(见=>v=>v+(见[v]=v见?见[v]+1:0))
({})
);
控制台日志(结果)
您可以像这样使用递归函数和.map()
:
设x=['firefaster\u 03\u'、'firefaster\u 03\u'、'firefaster\u 03\u'、'firefaster\u 05\u'、'firefaster\u 07\u'、'firefaster\u 07\u'、'firefaster\u 08\u'、'firefaster\u 08\u']
x=x.map((c,i,a)=>
a、 indexOf(c)==i?c+'0':f(a.indexOf(c),c,i,a.slice(1),1)
);
函数f(ac、c、i、a、s){
返回a.indexOf(c)==i-s?c+(s-ac):f(ac,c,i,a.slice(1),s+1);
}
控制台日志(x)代码>
如果您不介意从1开始,可以删除last-1您可以使用reduce
。还可以在操作之前对数组进行排序,以便仅与上一个元素进行比较
设x=['firefaster\u 03'、'firefaster\u 03'、'firefaster\u 03'、'firefaster\u 05'、'firefaster\u 07'、'firefaster\u 07'、'firefaster\u 07'、'firefaster\u 08'、'firefaster\u 08']排序();
让newStrArray=x.reduce((累加器、当前值、索引)=>{
//对于数组的第一个元素,无需进行任何更改
如果(索引==0){
push(`${currentVal}${index}`);
}否则{
//检查当前元素是否与中的上一个元素相同
//主阵列
常数prevVal=x[索引-1];
如果(prevVal==currentVal){
//如果相同,则从累加器数组中获取上一个元素
const getPrevVal=累加器[索引-1];
//获取最后一个字符,转换为数字并将其增加1
constnum=parseInt(getPrevVal.charAt(getPrevVal.length-1),10)+1;
//将值推送到累加器数组
accumulator.push(`${currentVal}${num}`)
}否则{
//如果上一个元素和当前元素不相同,则
//累加器阵列中的推流元件
acculator.push(`${currentVal}0`)
}
}
回流蓄能器;
}, []);
console.log(newStrArray)
你用什么来做这件事呢?好吧,这更像是机器学习的目的,有很多图像文件,但它们的名称不正确,我可以把它恢复到现在的状态,但无法为重复的名称添加一个数字
found = {}
x.forEach( (val, i) => {
found[val] = (found[val]||0) +1;
x[i] += found[val]-1;
})