JS重复字符串去除

news/2024/7/18 4:30:28 标签: javascript, 前端

去除重复字符串的应用场景包括:
数据处理和清洗:从获取的文本数据中去除重复的字符或字符串,以便进行进一步的分析或处理。
压缩和优化:例如在网络传输或存储数据时,去除重复字符串可以减少数据量,提高传输效率或节省存储空间。
文本比较和相似性分析:通过去除重复后,更准确地比较两个字符串的差异或相似程度。
特定规则的字符串处理:如去除连续重复的字符,只保留一个。

使用 Set 数据结构和扩展运算符

javascript">function removeDuplicateCharacters(str) {
  return [...new Set(str)].join('');
}
var str = "123123"; 
console.log(removeDuplicateCharacters(str)); 

new Set(str)会创建一个 Set 对象,Set 中的元素是唯一的,自动去除了重复字符。然后通过扩展运算符[…]将 Set 转换回数组,最后使用join(‘’)方法将数组重新组合成字符串。

使用循环和临时变量

javascript">function removeRepeatStr(str) {
  var newStr = '';
  var flag;
  var len = str.length;
  for (var i = 0; i < len; i++) {
    flag = 1; 
    var newLen = newStr.length;
    for (var j = 0; j < newLen; j++) {
      if (str[i] === newStr[j]) { 
        flag = 0; 
        break; 
      }
    }
    if (flag) { 
      newStr += str[i]; 
    }
  }
  return newStr;
}
var str = 'womendeaiwomingbai'; 
console.log(removeRepeatStr(str)); 

通过两层循环来判断当前字符是否已经在新字符串newStr中。如果不在,则将其添加到newStr中。外层循环遍历原始字符串的每个字符,内层循环检查该字符是否在已构建的newStr中。

使用 indexOf 方法

javascript">function removeRepeat(str) {
  var newStr = '';
  var len = str.length;
  for (var i = 0; i < len; i++) {
    if (newStr.indexOf(str[i]) === -1) { 
      newStr += str[i];
    }
  }
  return newStr;
}
var str = 'womendouyiyang'; 
console.log(removeRepeat(str)); 

遍历字符串中的每个字符,使用indexOf方法检查该字符是否首次出现在新字符串newStr中。如果indexOf返回-1,表示该字符不在newStr中,就将其添加进去。

使用对象属性

javascript">function removeRepeat(str) {
  var obj = {};
  var newStr = "";
  for (var i = 0; i < str.length; i++) {
    if (!obj[str[i]]) { 
      newStr += str[i];
      obj[str[i]] = 1; 
    }
  }
  return newStr;
}
var str = 'aaaaa'; 
console.log(removeRepeat(str)); 

创建一个空对象obj,遍历字符串时,将每个字符作为对象的属性。如果该属性不存在(即该字符首次出现),就将其添加到新字符串newStr中,并在对象中设置相应属性为 1。后续再次遇到相同字符时,由于对象属性已存在,就不会再添加到newStr中。

使用正则表达式

javascript">function removeDuplicate2(str) {
  var reg = /(.)(?=.*\1)/g; 
  var result = str.replace(reg, ""); 
  return result;
}
var str = 'aabdeegdcffdsf'; 
console.log(removeDuplicate2(str)); 

正则表达式/(.)(?=.\1)/g的含义如下:
(.):匹配任意一个字符,并将其捕获到分组中。
(?=.
\1):是一个正向肯定预查,它表示在当前位置右侧的文本中,必须存在与前面捕获到的分组(即(.)匹配到的字符)相同的字符。其中.*表示匹配任意数量的任意字符(包括 0 个字符),\1表示引用前面捕获到的分组。
/g:表示全局匹配模式,匹配所有符合条件的字符。
然后使用replace方法将匹配到的重复字符替换为空字符串,从而达到去除重复的效果。这种方法会去除所有连续的重复字符,并且保留第一个出现的字符。

先转数组再去重

javascript">var str = "aabccd"; 
var arr = str.split(""); 
console.log(arr); // ["a", "a", "b", "c", "c", "d"] 

var obj = {}; 
for (var i = 0; i < arr.length; i++) {
  // 若为第一次出现
  if (obj[arr[i]] === undefined) { 
    obj[arr[i]] = 1; 
  } else {
    obj[arr[i]]++; 
  }
}
console.log(obj); // {a: 2, b: 1, c: 2, d: 1} 

var str1 = ""; 
for (var i in obj) { 
  // i 代表的是 a, b, c, d
  str1 += i; 
  document.write(i + ":" + obj[i] + "<br>"); 
}
document.write("<br>" + str1);

首先使用split(“”)将字符串拆分成字符数组。然后创建一个空对象obj,遍历数组。如果字符在obj中不存在(即第一次出现),则将其作为属性添加到obj中,并设置属性值为 1;如果字符已经存在,则将其对应属性值加 1。最后通过遍历obj的属性,将属性名(即不重复的字符)拼接成新的字符串str1。这种方法可以统计每个字符出现的次数,并且去除重复字符。
这些方法各有优缺点,可以根据具体需求和场景选择合适的方法。例如,如果需要简洁的代码且不考虑浏览器兼容性,方法一可能是较好的选择;如果需要处理连续重复字符,方法五的正则表达式可能更合适;而方法二、三、四则相对简单直观,在一些简单场景下也能很好地工作。方法六可以同时获取每个字符出现的次数。

以上就是文章全部内容了,如果喜欢这篇文章的话,还希望三连支持一下,感谢!


http://www.niftyadmin.cn/n/5543974.html

相关文章

等保测评推动哈尔滨数字化转型中的安全保障

在数字经济的浪潮下&#xff0c;哈尔滨作为东北老工业基地的核心城市&#xff0c;正积极推动数字化转型&#xff0c;以创新技术驱动产业升级和经济发展。网络安全等级保护测评&#xff08;简称“等保测评”&#xff09;作为国家网络安全战略的重要组成部分&#xff0c;为哈尔滨…

为什么要考数据库证书?

考取数据库证书有多方面的理由和好处&#xff0c;这些好处不仅限于个人职业发展&#xff0c;也涉及到提升专业技能、增强竞争力以及获得行业认可等方面。以下是一些主要的原因&#xff1a; 提升专业技能&#xff1a;数据库证书考试通常要求考生掌握一定的数据库理论知识和实践技…

My sql 安装,环境搭建

以下以MySQL 8.0.36为例。 一、下载软件 1.下载地址官网&#xff1a;https://www.mysql.com 2. 打开官网&#xff0c;点击DOWNLOADS 然后&#xff0c;点击 MySQL Community(GPL) Downloads 3. 点击 MySQL Installer for Windows 4.点击Archives选择合适版本 5.选择后下载…

《向量数据库指南》——Milvus Cloud生成器增强:优化RAG Pipeline的深入探索

在信息检索与生成(Retrieval-Augmented Generation, RAG)的框架下,大型语言模型(Large Language Models, LLMs)如GPT系列、T5等,通过结合外部知识库的能力,极大地扩展了它们的应用场景与准确性。然而,在实际应用中,RAG系统仍面临诸多挑战,如检索到的信息中包含噪声、…

SpringMVC源码解析(一):web容器启动流程

SpringMVC源码系列文章 SpringMVC源码解析(一)&#xff1a;web容器启动流程 目录 一、SpringMVC全注解配置1、pom文件2、web容器初始化类(代替web.xml)3、SpringMVC配置类(代替springmvc.xml)4、测试Controller 二、SpringServletContainerInitializer1、web容器初始化入口2、…

如何确保AES加密过程中的数据安全性

在AES加密过程中&#xff0c;确保数据的安全性是至关重要的。以下是一些关键步骤和策略&#xff0c;以确保AES加密的数据安全性&#xff1a; 1. 使用安全的密钥管理 密钥生成&#xff1a;确保密钥是随机生成的&#xff0c;并且具有足够的长度&#xff08;如128位、192位或256…

zdppy + vue3 + antd 实现一个表格编辑行,批量删除功能

编辑单元格和多选的功能 首先是编辑单元格的功能&#xff0c;点击编辑按钮&#xff0c;可以直接在表格中队内容进行编辑&#xff0c;点击保存以后能够同步到数据库。 其次是多选的功能&#xff0c;点击每行前面的多选框按钮&#xff0c;我们可以选中多行。 完整后端代码&am…

51单片机-第一节-LED和独立按键

一、点亮LED&#xff1a; 首先包含头文件 <REGX52.H> 随后令P2为0xFE。(此时二进制对应1111 1110&#xff0c;为0 的LED亮&#xff0c;故八个灯中的最后一个亮起)。 注&#xff1a;P2为控制LED的8位寄存器。 void main() {P2 0xFE;//1111 1110while(1){} } 二、L…