我不知道如何在添加之前检查我的变量或其重复项是否已在列表中。
让我们举一个列表的例子:
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/