新手求助:如何从字符串中提取重复字符并生成新字符串?求多种方案
几种去除字符串重复字符的实现方法
先明确需求:从原字符串中生成新字符串,每个字符仅保留首次出现的实例,后续重复字符全部剔除(对应你给出的示例效果)。以下是几种适合新手理解的实现方式:
方法1:嵌套循环(符合你猜测的思路)
通过两层循环手动检查字符是否重复,是最基础的实现方式:
const str = "love to learn javascript"; let str2 = ""; // 外层循环遍历原字符串的每个字符 for (let i = 0; i < str.length; i++) { let isDuplicate = false; // 内层循环检查当前字符是否已经在结果字符串中 for (let j = 0; j < str2.length; j++) { if (str[i] === str2[j]) { isDuplicate = true; break; } } // 非重复字符才添加到结果里 if (!isDuplicate) { str2 += str[i]; } } console.log(str2); // 输出 "love tarnjscip"
方法2:数组+includes方法(更简洁)
用数组记录已出现的字符,借助includes方法简化重复判断:
const str = "love to learn javascript"; const seenChars = []; let str2 = ""; // 遍历原字符串的每个字符 for (const char of str) { // 如果字符没在已记录数组里,就添加进去 if (!seenChars.includes(char)) { seenChars.push(char); str2 += char; } } console.log(str2); // 输出 "love tarnjscip"
方法3:Set数据结构(ES6简洁写法)
利用Set自动去重的特性,一行核心代码搞定:
const str = "love to learn javascript"; // 字符串转Set去重 → 转数组 → 拼接成字符串 const str2 = [...new Set(str)].join(""); console.log(str2); // 输出 "love tarnjscip"
注:ES6及以上版本的Set会保留元素的插入顺序,刚好匹配需求。
方法4:对象记录出现情况(高效写法)
用对象的键存储已出现字符,判断速度比数组更快,适合处理长字符串:
const str = "love to learn javascript"; const seenChars = {}; let str2 = ""; for (const char of str) { // 若对象中没有该字符的记录,就标记并添加到结果 if (!seenChars[char]) { seenChars[char] = true; str2 += char; } } console.log(str2); // 输出 "love tarnjscip"
内容的提问来源于stack exchange,提问作者mariette eve
相关产品推荐
相关产品推荐

