javascript - 增加复制的字符串编号javascript
问题描述
我有用户列表,并且通过添加后缀复制到用户名来复制所选用户的重复操作。
因此,如果有 john 用户名,则重复操作将创建john 副本 1 ,如果现在用户复制此“john 副本 1”,那么将有“john 副本 2”,依此类推。
这是代码,我正在使用
private _getDuplicateUserName(userName: string, suffixIndex): string {
let _duplicateName;
if (userName.includes("Copy")) {
_duplicateName = userName.replace(/(\d+)+/g, (match, number) => {
const index = parseInt(number, 10) + 1;
return index.toString();
});
// for next iteration if this duplicate name exists
userName = _duplicateName;
} else {
_duplicateName = `${userName} Copy ${suffixIndex}`;
}
console.log(_duplicateName);
const _isSameName = this.users.find((_user: User) => _user.userName === _duplicateName);
if (_isSameName) {
return this._getDuplicateUserName(userName, suffixIndex + 1);
} else {
return _duplicateName;
}
}
创建重复的用户名后,我将新用户推送到this.users
重复的用户名。
这可行,但问题是如果有用户名john copy 1 copy 1它与john copy 2 copy 2复制它。
我只需要替换最后一个值,我猜需要更改正则表达式,对此有什么帮助吗?
解决方案
简单的任务可以通过简单的逻辑来解决,例如使用array.length 获取最后一个字符。
var name = 'John';
function changeName(username) {
if (username.includes('Copy')) {
const last = username[username.length - 1]
const count = parseInt(last) //check if valid integer
if (count) {
username = username.replace(/.$/, count + 1) //replace last char
} else {
username += ' Copy 1';
}
} else {
username += ' Copy 1';
}
name = username;
console.log('name', name);
}
changeName(name)
changeName(name)
changeName(name)
changeName(name)
changeName(name)
免责声明:我认为这不是重复名称的好方法。多人可以复制 John 2,你得到多个 John 3。用户也可以将自己命名为“复制”,然后你的代码就会中断。
推荐阅读
- python - Python Flask 请求表单:如何访问 select 元素的 option 子元素的 val 属性
- android - 如何在 android 的自定义对话框中设置自定义侦听器?
- javascript - 使用 Typescript 和 Webpack 管理依赖项的 AngularJS
- java - 将 Long 文件扫描成 java map
- sql - SQL:按变量等级检索数据
- vue.js - Vue 无法读取未定义的属性
- laravel - Laravel 5.3 日志权限 - 以无人身份创建/写入:nogroup
- android - 意图失败并在 SpeechFactory.fromSubscription 上取消(LUIS azure,android sdk)
- xgboost - Python、XGBoost、自定义目标函数:预测在迭代过程中保持不变,即使梯度不为零
- python - 将 Flask 请求注入另一个 Flask 应用程序