当前位置: 首页 > 知识库问答 >
问题:

JavaScript-如何通过添加一个数字来使记录唯一?

空佐
2023-03-14

现在,当文件已经存在,我添加了前缀,这是一个时间戳文件名,使它唯一。

但是,我想使用序号后缀,或者在文件名中添加一个数字,而不是使用时间戳。

如果文件存在,我将向文件名添加一个递增的数字。 但我不知道如何用一种好的方式来做这件事。

使用时间戳是可行的,但是它太长了,就像我们显示文件名时那样,所以我不是使用时间戳,我只是想增加一个数字到一个文件名。

HellWorldFileName-1593024232-时间戳太长,不是个好主意。

它应该基于数据库中的现有记录。 例如,如果我添加了一个文件名为Hellworldfilename的文件,并且它已经存在,那么新的文件名将是Hellworldfilename-1,如果我再次添加Hellworldfilename,新的文件名将是Hellworldfilename-2,依此类推。 知道我们怎样才能使一个文件名每次都是唯一的吗?

让我举一个例子。 假设我在数据库中有3个文件,文件名为filesname

DOC
DOC-1
DOC-2

如果我添加一个文件名为DOC的文件,新的文件名现在将是doc-3。

#用于检查文件是否存在的代码

const file = await context.service.Model.findOne({
    where: { humanId: record.id, filename: data.filename },
    paranoid: false,
  });

if (file) {
    const prefix = Date.now().toString();
    // eslint-disable-next-line no-undef
    const fileParts = data.filename.split('.');
    filename = `${fileParts[0]}-${prefix}.${fileParts[1]}`;
  

共有2个答案

卫仲卿
2023-03-14

您可以在全局范围内声明对象filenames,如下所示

const filenames={};

并使用它跟踪已打开的文件。

下面,我定义了一个函数MakeUnique(),其中包含了我之前提到的思想。 结果,我不得不对代码进行一些修改,但下面是一个工作片段:

null

const makeUnique=(function(){
 const filenames={};
 return function(fn){
  const fileParts=fn.split(".");
  const prefix=filenames[fn]!=null
  ? ++filenames[fn]
  : filenames[fn]=0;
  return fileParts[0]+(prefix?'-'+prefix:'')+(fileParts[1]?'.'+fileParts[1]:'');
 }
})();

console.log(["abc","def","abc","ghi","abc","abc.txt","def","abc.txt"].map(makeUnique))
鄢禄
2023-03-14

您需要检查文件名是否以-somenumber结尾。 如果是,那么您可以提取该数字并递增它。 否则将1放入结果:

function getNumberedFileName(fileN) {
    //These are value initializations to cope with the situation when the file does not have a .
    var fileName = fileN;
    var fileExtension = "";
    var lastDotIndex = fileN.lastIndexOf(".");
    if ((lastDotIndex > 0) && (lastDotIndex < fileN.length - 1)) { //We are not interested in file extensions for files without an extension hidden in UNIX systems, like .gitignore and we are not interested in file extensions if the file ends with a dot
        fileName = fileN.substring(0, lastDotIndex);
        fileExtension = "." + fileN.substring(lastDotIndex + 1);
    }
    var lastDashIndex = fileName.lastIndexOf("-");
    if ((lastDashIndex > 0) && (lastDashIndex < fileName.length - 1)) {
        var lastPart = fileName.substring(lastDashIndex + 1);
        if (!isNaN(lastPart)) {
            var index = parseInt(lastPart) + 1;
            return fileName.substring(0, lastDashIndex) + "-" + index + fileExtension;
        }
    }
    return fileName + "-1" + fileExtension;
}
 类似资料:
  • 我的Tomcat 8.5标准配置将日志分成 卡塔琳娜, 经理, 本地主机, 主持人经理 我的任务是添加到每个文件唯一的标签:CatalinaTag,mngTag,localTag,host MngTag 我试图在互联网上找到解决方案,但没有成功。 我的logging.properties预言是这样的: 下面是*ConsoleHandler的示例 这里是一个*格式化程序的例子 但到目前为止,我还不能

  • 11.3 添加一个Footer记录 经常写文本文件时,在所有处理都已经完成,一个”footer” 记录必须附加到文件的末尾.这也可以通过使用由Spring Batch提供的FlatFileFooterCallback接口,FlatFileItemWriter的FlatFileFooterCallback(和与之对应的FlatFileHeaderCallback)是可选的属性. <bean id="

  • 问题内容: 使用CMS,可防止编辑元素的HTML源。 例如,我想在标签上方添加以下内容: 问题答案: 您可以选择它并正常添加到它:

  • 问题内容: 我想将数字格式化为两位数。该问题是在– 通过时引起的,因此我需要将其格式化为– 。 JavaScript中有数字格式化程序吗? 问题答案: 我发现的最好方法是如下所示: (请注意,此简单版本仅适用于正整数) 对于小数,您可以使用此代码(尽管有点草率)。 最后,如果您必须处理负数的可能性,则最好存储符号,将格式化应用于数字的绝对值,然后在事实之后重新应用符号。请注意,此方法并不将数字限制

  • 问题内容: 我想将GET参数添加到可能不包含GET参数的URL中,而无需重复或。 例: 如果我要添加 如果您发现发现的问题,我会尽量不重复问号。 URL只是一个字符串。 附加特定GET参数的可靠方法是什么? 问题答案: 基本方法 更先进 如果不是类,则应至少将其放在函数中。

  • 我们使用SLF4J接口,在logback中配置记录器。xml文件。 我们需要过滤通过esapi html编码过滤器发送给记录器的所有参数。丑陋的解决方案是简单地用“ESAPI.getEncoder().encodeForHTML(..)”包装每个参数,但更好的解决方案需要我还不太熟悉的步骤。 我看到了需要slf4j和OWASP-ESAPI记录器帮助的Implement Custom Logger。

  • 我有下面的JSON代码,有必要在每个记录的末尾添加键/值,如示例所示。我使用JOLT Transform处理器进行JSON转换。 输入: 预期输出: 非常感谢你的帮助。提前感谢。

  • 这有点难以解释,但基本上,我很难为一个数字的每一个数字添加单词“really”。 所以就像 “那是一个真的(真的数量取决于一个数字的位数)大数字!” 所以如果我把1563块印出来 这是一个真的真的真的真的很大的数字!