gpt4 book ai didi

javascript - renameFiles - 获取文件名数组并根据它们在数组中出现的次数重命名它们

转载 作者:行者123 更新时间:2023-12-02 23:02:33 24 4
gpt4 key购买 nike

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

所以我们期望

['myFile', 'anotherFile', 'family-picture', 'myFile', 'another-file', 'myFile']

等于

['myFile', 'anotherFile', 'family-picture', 'myFile(1)', 'anotherFile(1)', 'myFile(2)']

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

function renameFiles (array) {
let map = {};
let final = [];
array.forEach((value) => {
if (!map[value]) {
map[value] = 0;
}
map[value] += 1;
});
let dups = [];
for (let key in map) {
if (map[key] > 1) {
let count = map[key];
while (count > 0) {
dups.push(key);
count--;
}
}
}
if (!dups.length) {
return array;
}
let dupNumber = dups.length - 1;
while (dupNumber >= 0) {
for (let i = array.length; i >= 0; i--) {
if (dups.includes(array[i])) {
final.unshift(array[i] + '(' + dupNumber + ')');
dupNumber --;
} else {
final.unshift(array[i]);
}
}
}
final = final.filter((element) => element !== undefined);
return final.map((element) => element.replace('(0)', ''));
}

console.log(renameFiles(['myFile', 'anotherFile', 'family-picture', 'myFile', 'another-file', 'myFile']));

除了挑战中的最后一个测试规范之外,这是有效的 - 如果原始列表中已存在该数字,我们需要在最终列表中的项目后面添加数字。

即我们预计

['a(1)', 'a(6)', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a',];

等于

['a(1)', 'a(6)', 'a', 'a(2)', 'a(3)', 'a(4)', 'a(5)', 'a(7)', 'a(8)', 'a(9)', 'a(10)', 'a(11)',]

那么对于这个问题,也许有比我创建的方法更好的初始方法?

这是一个pastebin本次挑战的 Jasmine 测试规范。

还有一个 JSFiddle,我在其中输入了测试规范,但我不知道如何将其他窗口中的 HTML 或 CSS 更改为 JS。

最佳答案

如果您执行一次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})`;
});
}

关于javascript - renameFiles - 获取文件名数组并根据它们在数组中出现的次数重命名它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57732937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com