首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向名称添加序号后缀以使记录具有唯一性

向名称添加序号后缀以使记录具有唯一性
EN

Stack Overflow用户
提问于 2020-08-01 11:07:10
回答 1查看 84关注 0票数 1

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

但是我想使用序号后缀,而不是使用时间戳。我们如何实现或在文件名中添加序号后缀?例如,数据库中有一个文件名为HELLOWORLD的现有文件。然后,我再次添加一个文件名为HELLOWORLD的文件,因为它已经存在,现在新的文件名将是HELLOWORLD- exist。如果我再次添加一个文件名为HELLOWORLD的文件,它将检查文件的更新,最新的文件名为HELLOWORLD -1,因此新的文件名现在将为HELLOWORLD-2,因为HELLOWORLD和HELLOWORLD-1已经存在。你知道我们怎样才能实现这样的东西吗?谢谢。

#检查记录是否存在的代码

代码语言:javascript
复制
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]}`;
  }

#序数后缀函数

代码语言:javascript
复制
function ordinal_suffix_of(i) {
    var j = i % 10,
        k = i % 100;
    if (j == 1 && k != 11) {
        return i + "st";
    }
    if (j == 2 && k != 12) {
        return i + "nd";
    }
    if (j == 3 && k != 13) {
        return i + "rd";
    }
    return i + "th";
}
EN

回答 1

Stack Overflow用户

发布于 2020-08-02 06:51:16

您可以重复循环,直到找到数据库中不存在的filename

代码语言:javascript
复制
let basename = filename = data.filename
let suffix = 0

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

  if ( ! file ) {
    break; // filename does not exist in DB, so exit loop
  }

  let ordinal_suffix = ordinal_suffix_of( ++suffix )
  filename = `${basename}-${ordinal_suffix}`
}

// filename is now guaranteed to be unique

如果数据库中存在filename,它会附加所需的序号后缀(1、2、3等)。并继续查找,直到在数据库中找不到具有该名称的文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63201346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档