首页 > 解决方案 > 如何将字符串添加到不重复的列表中

问题描述

在添加之前,我不知道如何检查我的变量或其重复项是否已经在列表中。

让我们以列表为例:

LIST = ['TestA', 'TestB', 'TestC (AZE)', 'TestB (#2)']

我开始这样做:

VARIABLE = "TestB"

if(this.LIST.includes(VARIABLE)) {
    this.LIST.push(VARIABLE + " (#2)");
} else {
    this.LIST.push(VARIABLE);
}

问题是如果我多次添加“ TestB ”,就会添加几个“ TestB (#2) ”。

如果有人可以帮助我将其付诸实践,谢谢。

标签: javascriptangulartypescriptlistduplicates

解决方案


使用另一个对象来跟踪到目前为止每个字符串出现的次数:

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);


推荐阅读