Javascript 重命名文件-获取文件名数组,并根据文件名在数组中出现的次数对其进行重命名

Javascript 重命名文件-获取文件名数组,并根据文件名在数组中出现的次数对其进行重命名,javascript,arrays,filter,jasmine,frequency,Javascript,Arrays,Filter,Jasmine,Frequency,对于这个编码挑战,我们的想法是根据文件在数组中出现的次数来重命名文件。项目的第一个实例不需要重命名 所以我们期待 ['myFile','anotherFile','family picture','myFile','other file','myFile'] 相等 ['myFile'、'anotherFile'、'family picture'、'myFile(1)'、'anotherFile(1)'、'myFile(2)'] 到目前为止,我已经创建了: 函数重命名文件(数组){ 设map={

对于这个编码挑战,我们的想法是根据文件在数组中出现的次数来重命名文件。项目的第一个实例不需要重命名

所以我们期待

['myFile','anotherFile','family picture','myFile','other file','myFile']

相等

['myFile'、'anotherFile'、'family picture'、'myFile(1)'、'anotherFile(1)'、'myFile(2)']

到目前为止,我已经创建了:

函数重命名文件(数组){
设map={};
设final=[];
array.forEach((值)=>{
如果(!映射[值]){
map[值]=0;
}
映射[值]+=1;
});
设dups=[];
for(让我们输入地图){
如果(映射[键]>1){
让计数=映射[键];
而(计数>0){
双推(键);
计数--;
}
}
}
如果(!重复长度){
返回数组;
}
设dupNumber=dups.length-1;
而(dupNumber>=0){
for(设i=array.length;i>=0;i--){
if(dups.includes(数组[i]){
final.unshift(数组[i]+'('+dupNumber+'));
数字--;
}否则{
最终。取消移位(数组[i]);
}
}
}
final=final.filter((元素)=>元素!==未定义);
返回final.map((element)=>element.replace(“(0)”);
}

log(重命名文件(['myFile','anotherFile','family picture','myFile','other file','myFile'])如果执行单个reduce来计算每个数字的数量,然后在遍历以追加数字时,跟踪从0开始的偏移量,该偏移量在找到相同的值时以及在已存在尝试的名称时都会增加,该怎么办

注意:它对偏移量有点挑剔,因为它需要从1开始,但只有在有2个或更多的偏移量时才需要,但这似乎是可行的:

function renameFiles(array) {
    const offsets = {};
    const counts = array.reduce((countObj, fn) => {
        countObj[fn] = (countObj[fn] || 0) + 1;
        offsets[fn] = 0;
        return countObj;
    }, {});

    return array.map(val => {
        ++offsets[val];
        while (offsets[val] > 1 && array.includes(`${val}(${offsets[val] - 1})`)) {
            ++offsets[val];
        }
        return offsets[val] === 1 ? val : `${val}(${offsets[val] - 1})`;
    });
}