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

JavaScript提取两个字符串相同单词:面试代码错误排查

你的代码存在这几个关键问题

1. 用赋值运算符代替了比较运算符

你在if条件里写的是splittedStr1[i] = splittedStr2[j],这是赋值操作,不是比较。它会把splittedStr2[j]的值赋给splittedStr1[i],然后判断这个赋值后的结果是否为“真值”(非空字符串都是真值),所以每次循环都会执行similarWords.push(),这就是输出里出现大量重复甚至错误元素的原因。

正确的比较应该用全等运算符===(推荐用===避免类型转换问题):

if (splittedStr1[i] === splittedStr2[j])

2. 内层循环起始索引错误

内层循环你写的是j = i,这会导致当i递增时,跳过str2中前i个元素的检查。比如当i=1时,j从1开始,不会检查str2[0],完全不符合“查找所有相同单词”的逻辑,应该让j从0开始遍历整个splittedStr2:

for (let j = 0; j < splittedStr2.length; j++)

3. 未声明循环变量,引发全局污染

i和j没有用let/var声明,会自动变成全局变量,在复杂代码中容易引发意外冲突,规范写法是在循环内声明变量:

for (let i = 0; i < splittedStr1.length; i++) {
  for (let j = 0; j < splittedStr2.length; j++) {
    // ...
  }
}

4. 未处理重复单词的问题

即使修复了上面的问题,当同一个单词在两个字符串中多次出现时,会被重复添加到similarWords里。如果需要的是去重后的相同单词列表,还需要额外处理。


修复后的完整代码(保留重复匹配)

如果只是要收集所有匹配的单词(包括重复):

const str1 = "This is string 1";
const str2 = "This is string 2";
let similarWords = [];
const splittedStr1 = str1.split(" ");
const splittedStr2 = str2.split(" ");

for (let i = 0; i < splittedStr1.length; i++) {
  for (let j = 0; j < splittedStr2.length; j++) {
    if (splittedStr1[i] === splittedStr2[j]) {
      similarWords.push(splittedStr1[i]);
    }
  }
}

console.log(similarWords);
// 输出: ["This", "is", "string"]

去重版本的实现(获取唯一的相同单词)

如果需要的是两个字符串中都存在的唯一单词列表,可以用Set简化逻辑:

const str1 = "This is string 1";
const str2 = "This is string 2";
const set1 = new Set(str1.split(" "));
const similarWords = str2.split(" ").filter(word => set1.has(word));

// 去重(如果str2本身有重复单词)
const uniqueSimilarWords = [...new Set(similarWords)];

console.log(uniqueSimilarWords);
// 输出: ["This", "is", "string"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:40:40