You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何编写接收2个字符串返回无重复共通字符数组的函数

现有代码问题修正

你当前的代码首先存在2个可优化/修复的点:

  1. 内层匹配判断存在索引笔误:if (new_str1[i] == new_str2[i]) 中第二个下标应为内层循环变量j,否则只会比对两个字符串同位置的字符,无法遍历str2的所有字符
  2. replace(" ", "") 只会替换字符串中的第一个空格,建议替换为replaceAll(" ", "") 实现移除所有空格的效果

字符去重实现思路

针对去重需求,推荐两种适合初学者理解的实现方案:

  • 方案1:存入数组前校验去重
    每次匹配到共通字符后,先用数组的includes()方法判断该字符是否已经存在于结果数组中,仅当不存在时才执行push操作,从源头避免重复值进入结果。这种方案逻辑直观,还可以提前跳过已匹配过的字符,降低不必要的循环次数。
  • 方案2:最终结果统一去重
    先保留所有匹配到的重复字符,最后利用ES6 Set 数据结构天然不存储重复值的特性,将结果数组转成Set后再转回数组即可完成去重,代码写法非常简洁。

修正后完整代码(方案1实现)

function get_common_characters(str1, str2) {
    let common_chars = []
    // 预处理字符串:移除所有空格、统一转小写
    const new_str1 = str1.replaceAll(" ", "").toLowerCase()
    const new_str2 = str2.replaceAll(" ", "").toLowerCase()

    for (let i = 0; i < new_str1.length; i++) {
        const currentChar = new_str1[i]
        // 已存在于结果数组的字符直接跳过,不需要再循环比对
        if (common_chars.includes(currentChar)) continue
        for (let j = 0; j < new_str2.length; j++) {
            if (currentChar === new_str2[j]) {
                common_chars.push(currentChar)
                // 匹配到后直接跳出内层循环,不需要再比对剩余字符
                break
            }
        }
    }

    return common_chars
}

如果采用方案2,只需要修改最终返回的代码即可,其余循环逻辑不需要调整:

// 剩余代码和你原来的逻辑一致,仅修改返回值即可完成去重
return [...new Set(common_chars)]

内容的提问来源于stack exchange,提问作者Nix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:00:00