javascript - 如何将字符串添加到不重复的列表中
问题描述
在添加之前,我不知道如何检查我的变量或其重复项是否已经在列表中。
让我们以列表为例:
LIST = ['TestA', 'TestB', 'TestC (AZE)', 'TestB (#2)']
如果我想添加“ TestA ”,那么我添加“ TestA (#2) ”。
如果我想添加 ' TestB ' 或 ' TestB (#X) ',其中
X
是任何数字,然后我添加 ' TestB (#3) ',因为已经存在重复并且重复的数字将是3。如果我想添加“ TestC (AZE) ”,那么我添加“ TestC (AZE) (#2) ”。
我开始这样做:
VARIABLE = "TestB"
if(this.LIST.includes(VARIABLE)) {
this.LIST.push(VARIABLE + " (#2)");
} else {
this.LIST.push(VARIABLE);
}
问题是如果我多次添加“ TestB ”,就会添加几个“ TestB (#2) ”。
如果有人可以帮助我将其付诸实践,谢谢。
解决方案
使用另一个对象来跟踪到目前为止每个字符串出现的次数:
LIST = [];
const counts = {};
function addToList(item) {
counts[item] = (counts[item] || 0) + 1;
LIST.push(item + (counts[item] === 1 ? '' : ' (#' + counts[item] + ')'));
}
addToList('foo');
addToList('foo');
addToList('bar');
addToList('baz');
addToList('bar');
addToList('foo');
console.log(LIST);
要么确保addToList
不使用(#
后缀调用,要么(#
先去掉后缀,例如:
LIST = [];
const counts = {};
function addToList(item) {
const trailingMatch = item.match(/ \(#\d+\)$/);
if (trailingMatch) {
item = item.slice(0, item.length - trailingMatch[0].length);
}
counts[item] = (counts[item] || 0) + 1;
LIST.push(item + (counts[item] === 1 ? '' : ' (#' + counts[item] + ')'));
}
addToList('foo');
addToList('foo');
addToList('bar');
addToList('baz');
addToList('bar');
addToList('foo');
addToList('foo (#2)');
console.log(LIST);
推荐阅读
- php - Laravel 在安装 Stripe 时删除了 Fideloper,导致:n Application.php 第 735 行:找不到类 Fideloper\Proxy\TrustedProxyServiceProvider"
- kotlin - 当我在 LazyColumn 中设置stickHeader 或多个项目时,它滚动不正确
- html - 使用图像标签在网页上显示原始像素数组
- reactjs - React 获取 ResponsiveReactGridLayout 中父元素的大小
- c - 输入值时,Scanf() 在 C 中无法正常工作
- mysql - Django 测试 OperationalError 无法创建表
- python-3.x - 我在 repli 中编码的不和谐机器人有一些问题
- javascript - Discord Bot 不播放音频 discord.js v13
- python - 容器中的 AWS Lambda (python) 在本地工作但未部署
- python - 无法将任务添加到待办事项列表