【问题标题】:Program to find same words from 2 strings javascript从 2 个字符串 javascript 中查找相同单词的程序
【发布时间】:2023-01-26 17:13:24
【问题描述】:

我在一次采访中被问到这个问题,但我没有回答。

这是我的尝试:

str1 = "This is string 1";
str2 = "This is string 2";
let similarWords = [];
splittedStr1 = str1.split(" ");
splittedStr2 = str2.split(" ");
console.log(splittedStr1);
console.log(splittedStr2);
for (i = 0; i < splittedStr1.length; i++) {
  for (j = i; j < splittedStr2.length; j++) {
    if (splittedStr1[i] = splittedStr2[j]) {
      similarWords.push(splittedStr1[i]);
    }
  }
}
console.log(similarWords);

这输出:

[
    "This",
    "is",
    "string",
    "2",
    "is",
    "string",
    "2",
    "string",
    "2",
    "2"
]

我想知道我错过了什么?

我已经展示了我上面的尝试。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    代码的问题在于,在内部 for 循环中,当检查 splittedStr1[i] 是否等于 splittedStr2[j] 时,您使用的是赋值运算符 (=) 而不是比较运算符 (== or ===)。

    为此,您应该将赋值运算符更改为比较运算符。然后你还需要在再次添加之前检查这个词是否已经添加到similarWords数组中。

    尝试这个。

    let str1 = "This is string 1";
    let str2 = "This is string 2";
    let similarWords = [];
    let splittedStr1 = str1.split(" ");
    let splittedStr2 = str2.split(" ");
    
    for (i = 0; i < splittedStr1.length; i++) {
      for (j = 0; j < splittedStr2.length; j++) {
        if (splittedStr1[i] === splittedStr2[j] && !similarWords.includes(splittedStr1[i])) {
          similarWords.push(splittedStr1[i]);
        }
      }
    }
    console.log(similarWords);

    【讨论】:

    • 为了安全起见,此检查可防止在数组中多次添加相同的单词。
    【解决方案2】:

    也许他们想要这样的东西。

    const str1 = "This is string 1";
    const str2 = "This is string 2";
    const sep = /[^a-zA-Z0-9]/;
    const words = new Set(str1.split(sep));
    str2.split(sep).filter(word => words.has(word)); // ['This', 'is', 'string']
    

    【讨论】:

      【解决方案3】:

      基本上,我们将两个以空格分隔的字符串视为集合,并希望找到两者之间的交集。

      let str1 = "This is string 1";
      let str2 = "This is string 2";
      

      首先,我们将字符串拆分成它们的组成部分并准备好输出数组。

      let set1 = str1.split(" ");
      let set2 = str2.split(" ");
      let output = [];
      

      大概 set1 现在看起来像 ['This', 'is', 'string', '1'] 和 set2 类似。

      现在我们可以循环一个并检查每个元素是否存在于另一个中。

      set1.forEach(element => {
          set2.includes(element) ? 
          output.push(element) : 
          {} // do nothing
        });
      
      console.log(output)
      

      在控制台中运行我的代码给出:

      ['This', 'is', 'string']
      

      【讨论】:

        猜你喜欢
        • 2014-10-18
        • 1970-01-01
        • 1970-01-01
        • 2018-11-25
        • 1970-01-01
        • 1970-01-01
        • 2018-08-13
        • 2013-02-13
        • 1970-01-01
        相关资源
        最近更新 更多