在 while 循环中增加一个对象
incrementing an object in a while loops
输入: ["doc", "doc", "image", "doc(1)", "doc"]
输出: ["doc", "doc(1)", "image", "doc(1)(1)", "doc(2)"]
问题:
{used[name]++}
这部分代码在骗我。
我不明白 line 以及我为什么不将 1 分配给第一件事
代码通过反复试验以其应有的方式工作;但我很难把我的大脑围绕在这个循环上。
我的理解:
我们遍历名称,然后是每个以 docs 开头的名称;我们将 newName 分配给 doc1
我试过的:
used[newName] = 6;
结果:
[文档、文档(6)、图像、文档(1)、文档(7)]
这让我更加困惑。很晚了,我可能只是需要睡一觉。
const solution = names => {
const used = {};
return names.map(name => {
let newName = name;
while (used[newName]) {
newName = `${name}(${used[name]++})`;
}
used[newName] = 1;
return newName;
});
};
第一次遇到名字used[newName]
是undefined
,所以while
循环甚至没有开始,返回newName
。下次遇到时,你已经有了user[newName]=1
,所以(1)
被追加到名称后面,依此类推。
输入: ["doc", "doc", "image", "doc(1)", "doc"]
输出: ["doc", "doc(1)", "image", "doc(1)(1)", "doc(2)"]
问题:
{used[name]++}
这部分代码在骗我。
我不明白 line 以及我为什么不将 1 分配给第一件事
代码通过反复试验以其应有的方式工作;但我很难把我的大脑围绕在这个循环上。
我的理解:
我们遍历名称,然后是每个以 docs 开头的名称;我们将 newName 分配给 doc1
我试过的:
used[newName] = 6;
结果: [文档、文档(6)、图像、文档(1)、文档(7)]
这让我更加困惑。很晚了,我可能只是需要睡一觉。
const solution = names => {
const used = {};
return names.map(name => {
let newName = name;
while (used[newName]) {
newName = `${name}(${used[name]++})`;
}
used[newName] = 1;
return newName;
});
};
第一次遇到名字used[newName]
是undefined
,所以while
循环甚至没有开始,返回newName
。下次遇到时,你已经有了user[newName]=1
,所以(1)
被追加到名称后面,依此类推。