作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我不知道如何在添加之前检查我的变量或它的重复项是否已经在列表中。
让我们以列表为例:
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);
关于javascript - 如何在不重复的情况下将字符串添加到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57971450/
我是一名优秀的程序员,十分优秀!