Javascript 算法-文件命名
系统将按文件名的顺序为您提供所需文件名的数组 创造由于两个文件不能有相同的名称,因此 稍后将以(k)的形式添加到其名称中,其中k是 不使用获取的名称的最小正整数 然而 返回将提供给文件的名称数组 范例 对于名称=[“doc”、“doc”、“image”、“doc(1)”、“doc”],输出 应为文件命名(名称)=[“文档”、“文档(1)”、“图像”、“文档(1)(1)”, “文件(2)”] 一个人发布了这个解决方案:Javascript 算法-文件命名,javascript,Javascript,系统将按文件名的顺序为您提供所需文件名的数组 创造由于两个文件不能有相同的名称,因此 稍后将以(k)的形式添加到其名称中,其中k是 不使用获取的名称的最小正整数 然而 返回将提供给文件的名称数组 范例 对于名称=[“doc”、“doc”、“image”、“doc(1)”、“doc”],输出 应为文件命名(名称)=[“文档”、“文档(1)”、“图像”、“文档(1)(1)”, “文件(2)”] 一个人发布了这个解决方案: const fileNaming = names => { co
const fileNaming = names => {
const used = {};
return names.map(name => {
let newName = name;
while (used[newName]) {
newName = `${name}(${used[name]++})`;
}
used[newName] = 1;
return newName;
});
};
我很难理解而块的情况
used
是一个空对象
newName
是一个新变量,它等于names
数组中的当前项
used[newName]
如何解析为一个数字<代码>已使用
永远不会设置为空对象以外的任何对象
这是console.log(使用[newName])
使用此输入:
["dd",
"dd(1)",
"dd(2)",
"dd",
"dd(1)",
"dd(1)(2)",
"dd(1)(1)",
"dd",
"dd(1)"]
在JavaScript中,{}
是一个空对象,因此,它可以包含任意数量的键值对。未定义的键具有值undefined
,测试时其计算结果为false
。但是,任何非零、非NaN数值的计算结果将为true
:
console.log({}[“一个不存在的密钥”])//未定义
while(未定义){
console.log(“永远不应该打印”);//永远不执行
}
而({}[“不存在的密钥”]){
console.log(“永远不应该打印”);//永远不执行
}
如果(1){
log(“正数为真”);//写入控制台
}
一个人发布了此解决方案
令人担忧。您提出自己的解决方案了吗?请在控制台.log()
中输出name
和newName
的值。我有一种感觉,你可能会在看到循环后理解它。你说used永远不会设置为空对象以外的任何对象。
。但是在示例代码中,有一行:used[newName]=1代码>。这与你的说法相矛盾也许这是你理解循环的关键?我没有想出我自己的解决方案。该平台展示了其他用户的答案,这是投票最多的。提示:搜索“后缀增量运算符”。我的后续可能是“错误的”,但请耐心等待<代码>已使用
是空对象。我们没有添加任何内容。使用[newName
是否总是未定义?它是如何返回真实值的?但是,我知道有一个概念我并不完全理解,因此感谢您允许我使用它。Hahay您可以通过对象[“key”]在JS对象中添加或设置键值项=value
,相当于对象。key=value
。然而,[]
符号允许使用一个作为变量的键:让foo=“quix”;object.foo=“bar”
相当于对象[“foo”]=“bar”
,而让foo=“quix”;对象[foo]=“bar”
相当于对象[“quix”]=“条形图”