如何在Javascript中检查两个字符串是否包含相同的字符?

时间:2017-12-15 19:29:53

标签: javascript string compare character matching

我有两个字符串:

var a = 'ABCD';
var b = 'DEFG';

我需要比较这些变量以检查两个字符串中是否没有共同的CHARACTER。

因此,对于这种情况,请返回false(或执行某些操作......),因为D是其中的常见字符。

6 个答案:

答案 0 :(得分:2)

你可以合并两个字符串,然后对它进行排序,然后循环遍历它,如果你找到匹配,你就可以退出循环。

我在不同的堆栈溢出对话中发现了这个建议:

selected

因此,如果将字符串合并在一起,则可以执行上述操作以使用正则表达式而不是循环。

答案 1 :(得分:2)

谢谢大家。我尝试了你的解决方案,最后得到了这个:

  • 将我的两个字符串合并为一个
  • 改为小写,
  • 排序,
  • 和加入,
  • 如果Final Concatenated字符串包含任何内容,则使用Regex Match 重复,
  • 如果没有重复发生或重复计数,则返回0。

    var a; var b; 
    var concatStr=a+b;
    checkReptCharc=checkRepeatChrcInString(concatStr);
    function checkRepeatChrcInString(str){
    console.log('Concatenated String rec:' +  str);
    try{ return 
    str.toLowerCase().split("").sort().join("").match(/(.)\1+/g).length; }
    catch(e){ return 0; } 
     }
    

答案 2 :(得分:1)

我也在寻找解决这个问题的方法,但是想出了这个办法:

a.split('').filter(a_ => b.includes(a_)).length === 0

a分成字符数组,然后使用过滤器检查a中的每个字符是否出现在b中。这将返回带有所有匹配字母的新数组。如果length为零,则没有匹配的字符。

如有必要,将toUpperCase()添加到a​​和b

答案 3 :(得分:0)

因此,如果它只使用.split('')在单独的字符串数组中复制字符串,那么我将分别对两个字符串进行排序,然后进行二进制搜索,从最短长度的数组开始,如果长度相同只需使用第一个,然后按字符逐行搜索,看是否在另一个字符串中。

答案 4 :(得分:0)

这显然与原始海报无关紧要,但是找到此答案的其他人可能会觉得这很有用。

var a = 'ABCD';
var b = 'DEFG';

function doesNotHaveCommonLetter(string1, string2) {
    // split string2 into an array
    let arr2 = string2.split("");
    // Split string1 into an array and loop through it for each letter.
    // .every loops through an array and if any of the callbacks return a falsy value,
    //     the whole statement will end early and return false too.
    return string1.split("").every((letter) => {
        // If the second array contains the current letter, return false
        if (arr2.includes(letter)) return false;
        else {
            // If we don't return true, the function will return undefined, which is falsy
            return true;
        } 
    })
}

doesNotHaveCommonLetter(a,b) // Returns false
doesNotHaveCommonLetter("abc", "xyz") // Returns true

答案 5 :(得分:0)

const _str1 = 'ABCD';
const _str2 = 'DEFG';

function sameLetters(str1, str2) {
  if(str1.length !== str2.length) return false;
  
  const obj1 = {}
  const obj2 = {}
 
 for(const letter of str1) {
    obj1[letter] = (obj1[letter] || 1) + 1
 } 
 for(const letter of str2) {
    obj2[letter] = (obj2[letter] || 1) + 1
 }
  
 for(const key in obj1) {
    if(!obj2.hasOwnProperty(key)) return false
    if(obj1[key] !== obj2[key]) return false
  }
  return true
}

sameLetters(_str1, _str2)