Javascript 比较两个字符串并计算不同的字母

Javascript 比较两个字符串并计算不同的字母,javascript,arrays,string,Javascript,Arrays,String,我必须编写一个函数,它接收两个字符串并进行比较,然后返回字符串中不同的字母数。例如,“ABC”和“DEC”应该返回4。我的函数总是出现一个短值,因为我是如何比较它们的。我看过了,但似乎找不到解决办法 我尝试过在字符串中循环而不拆分,结果也遇到了同样的问题 function makeAnagram(a, b) { let result = 0; let a1 = a.split("").sort(); let b1 = b.split("").sort(); fo

我必须编写一个函数,它接收两个字符串并进行比较,然后返回字符串中不同的字母数。例如,“ABC”和“DEC”应该返回4。我的函数总是出现一个短值,因为我是如何比较它们的。我看过了,但似乎找不到解决办法

我尝试过在字符串中循环而不拆分,结果也遇到了同样的问题

function makeAnagram(a, b) {
    let result = 0;

    let a1 = a.split("").sort();
    let b1 = b.split("").sort();
    for(let i = 0; i < b1.length; i++){
        if(a1.indexOf(b1[i] < 0)){
            result += 1;
        }
    }


    return result;
 }
函数生成语法(a,b){
设结果=0;
设a1=a.split(“”.sort();
设b1=b.split(“”.sort();
for(设i=0;i
您可以执行以下操作:

根据建议编辑

const makeAnagram=(a,b)=>{
常数arr1=a.split(“”)
常数arr2=b.split(“”)
常量diff1=arr1.filter(字母=>!arr2.includes(字母))
常量diff2=arr2.filter(字母=>!arr1.includes(字母))
返回diff1.length+diff2.length
}
console.log(makeAnagram('ABC','DEC'))
在一行中:

("ABC"+"DEC").split('').sort().join('').replace(/(.)\1+/g, "").length
返回

4
计划的步骤:

  • (“ABC”+“DEC”)
    用两个合并词组成一个字符串:
    ABCDEC

  • (“ABC”+“DEC”).split(“”).sort().join(“”)
    使字符在字符串中排序:
    ABCCDE
    。这将使我们能够使用正则表达式轻松地找到重复项

  • replace(/()\1+/g,”)
    删除2个以上字符的所有序列,然后我们得到
    ABDE

  • .length
    统计剩余的字符,这些字符只出现一次


  • ES6中也有这样做的方法

    constmakeanagram=(a,b)=>新集合(a+b).size-新集合([…a].filter(x=>b.includes(x)).size;
    console.log(makeAnagram('ABC','DEC'));//印刷品4
    
    这就是我要做的

    实施 您可以在一行中执行相同的操作

    调用方:
    makeAnagram('ABC','DCE')

    输出:
    4


    您的结束括号位于错误的位置
    a1.indexOf(b1[i]<0)
    应该是
    a1.indexOf(b1[i])<0
    。此外,无需执行
    .sort()
    当每个单词中有3个字母时,“ABC”和“DEC”如何返回4…@Gibor-因为它们在不同的后面letters@gibor它们有共同的
    C
    ,所以不同的是
    ABDE
    ,长度为4。请问如果ABCC和DEC?相同的4或5?我试图写一些类似的东西,但忘记了
    。包括
    。使用
    […diff1,…diff2]。长度对我来说似乎有点太长了。如果只使用
    diff1.length+diff2.length
    ,不是更简单更快吗?@freefiller感谢您的评论。。我已经重构了,因为它看起来更好!谢谢@MattEllen。奇怪的是@TEbogo,我建议@SumitRamteke是的,我看到了你的答案,你在我的答案提交后至少5分钟提交了它,我的答案在你提交你的答案时已经被接受:)它看起来很整洁,但是,会发生什么:
    (“AA”+“ZZ”).split(“”).sort().join(“”)。replace(/(。\1+/g,”)。length
    let makeAnagram = (a,b) => {
      let clubStr = ('' + a).concat(b);
      let sortedStr = clubStr.trim().split('').sort().join('');
      let uncommonStr = sortedStr.replace(/(\w)\1+/gi, '');
      return uncommonStr.length;
    };