在JavaScript中如何移除字符串中的重复项

19

我在 JavaScript 中有一个字符串,其中有很多重复的内容。例如,我有以下字符串:

var x = "Int32,Int32,Int32,Int32,Int32,Int32,Int32,Int32,Int32,Double,Double,Double"

我该怎样删除重复项并获得例如x="Int32,Double"


6
你试过任何事情吗? - meskobalazs
这个回答解决了你的问题吗?获取JavaScript数组中的所有唯一值(删除重复项) - Liam
12个回答

56

使用SetArray.from,这非常容易:

Array.from(new Set(x.split(','))).toString()

var x = "Int32,Int32,Int32,Int32,Int32,Int32,Int32,Int32,Int32,Double,Double,Double"
x = Array.from(new Set(x.split(','))).toString();
document.write(x);


1
做得好 :) ^_^ 但是你能提供一个在 jsfiddle 上的示例吗? - solimanware
6
@Microsmsm为什么...你可以在控制台中直接运行它。为什么你不能为此创建一个fiddle? - charlietfl
@Microsmsm,这是给你的。 - MinusFour
@Microsmsm - 请注意,您必须使用最新的Chrome或Firefox才能正常工作。 - adeneo
1
而且,它可以通过x = [...new Set(x.split(','))].join(',');缩短。 - adeneo

4

如果您需要支持现有的浏览器,可以将数组分割,然后过滤它。

var x = "Int32,Int32,Int32,Int32,Int32,Int32,Int32,Int32,Int32,Double,Double,Double";
    
var arr = x.split(',');
    
x = arr.filter(function(value, index, self) { 
    return self.indexOf(value) === index;
}).join(',');

document.body.innerHTML = x;


3

这很简单,只需使用new Set删除字符串中的重复项,然后使用join将它们连接。

var x = "Int32,Int32,Int32,Int32,Int32,Int32,Int32,Int32,Int32,Double,Double,Double";
console.log([...new Set(x)].join(""));


2
new Set 通过逗号分隔... Javascript 在时代中不断地惊喜着。 - xamgore

3

使用新的JS语法从字符串中删除重复项。

String.prototype.removeDuplicate = Function() {
  const set = new Set(this.split(','))
  return [...set].join(',')
}
x.removeDuplicate()

2
这是一种更易读且参数化更好的解决方案:
var x = "Int32,Int32,Int32,Int32,Int32,Int32,Int32,Int32,Int32,Double,Double,Double"
var removeDup = [...new Set(x.split(","))].join(",");

//结果 "Int32,Double"


2
  function myFunction(str) {
    var result = "";
    var freq = {};
    for(i=0;i<str.length;i++){
       let char = str[i];
       if(freq[char]) {
        freq[char]++;      
       } else {
        freq[char] =1
        result = result+char;
       }
    }
    return result;
  }

1

看这个 -

removeDuplicates() 函数接受一个字符串作为参数,然后使用内置的字符串拆分函数将其拆分为单个字符的数组。然后对于 arr2 数组,它最初是空的,forEach 循环检查 arr2 中的每个元素 - 如果 arr2 已经有该元素,则不会将该字符推入其中,否则将推入其中。因此,返回的最终数组是具有唯一元素的数组。最后,我们使用 join() 方法将数组连接成一个字符串

const removeDuplicates = (str) => {
const arr = str.split("");
const arr2 = [];

arr.forEach((el, i) => {
 if (!arr2.includes(el)) {
    arr2.push(el);
   }
 });
 return arr2.join("").replace(",", "").replace("", " ");
};

console.log(removeDuplicates( "Int32,Int32,Int32,Int32,Int32,Int32,Int32,Int32,Int32,Double,Double,Double"));

1
请在您的答案中添加一些解释,以便其他人可以从中学习。 - Nico Haase
谢谢您的建议 - 我已经添加了解释。 - Mohammad Basit

0
你可以使用 replaceAll 函数:

let str = "/Courses/"

let newStr = str.replaceAll('/', '')

console.log(newStr) // 结果 -> Courses


0
function removeDups(s) {
let charArray = s.split("");
  for (let i = 0; i < charArray.length; i++) {
    for (let j = i + 1; j < charArray.length; j++)
      if (charArray[i] == charArray[j]) {
        charArray.splice(j, 1);
        j--;
      }
  }
  return charArray.join("");
}
console.log(removeDups("Int32,Int32,Int32,InInt32,Int32,Double,Double,Double"));

0
function removeDuplicate(x)
{
    var a = x.split(',');
    var x2 = [];
    for (var i in a)
        if(x2.indexOf(a[i]) == -1) x2.push(a[i])
    return  x2.join(',');
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接