JavaScript检查字符串是否至少有三个字符位于另一个变量中

JavaScript检查字符串是否至少有三个字符位于另一个变量中,javascript,string,character,var,indexof,Javascript,String,Character,Var,Indexof,我有一个变量activeUserName和一个变量manager1 var activeUserName = "JohnDoe100"; var manager1 = "JYZALoe999"; 如何检查activeUserName是否至少包含manager1中的三个字符?(这些角色的位置无关紧要) 例如,在以下情况下,它应该返回true,因为字符“J”、“o”和“e”在manager1中 var activeUserName = "JohnD

我有一个变量
activeUserName
和一个变量
manager1

var activeUserName = "JohnDoe100";
var manager1 = "JYZALoe999";
如何检查
activeUserName
是否至少包含
manager1
中的三个字符?(这些角色的位置无关紧要)

例如,在以下情况下,它应该返回true,因为字符“J”、“o”和“e”在
manager1

var activeUserName = "JohnDoe100";
var manager1 = "JYZALoe999";
现在我正在使用indexOf方法,只查看某些位置的字符,这就是为什么我要更改它:

if (isEditor == false){
    if (((activeUserName.indexOf(manager1.charAt(0)) !== -1)  && (activeUserName.indexOf(manager1.charAt(2)) !== -1)) || (activeUserName.indexOf(manager1.charAt(4)) !== -1)){
        // doSth();
    } else if (((activeUserName.indexOf(manager2.charAt(0)) !== -1)  && (activeUserName.indexOf(manager2.charAt(2)) !== -1)) || (activeUserName.indexOf(manager2.charAt(4)) !== -1)){
        // doSth();
    } else {
        // doSth();
    }
}
我读过关于Regex的文章,但我不确定这是否适用于这里

感谢您的帮助

与相结合,您可以在数组中转换activeUserName,并根据字符串manager1筛选每个字符:

var activeUserName=“JohnDoe100”;
var manager1=“JYZALoe999”;
var howMany=activeUserName.split(“”).filter(函数(e,i,a){
返回(manager1.indexOf(e)!=1);
}).长度;
log('公共字符数为:'+多少)
var activeUserName=“JohnDoe100”;
var manager1=“JYZALoe999”;
常量arr1=[…activeUserName];
常量arr2=[…manager1];
让计数=0;
for(设i=0;i=3)

log(`stringb3与stringb`的值相同)我认为这种方法更好,因为我们不必使用split(“”)创建新数组

var activeUserName=“JohnDoe100”;
var manager1=“JYZALoe999”;
让计数=“”
for(请填写activeUserName的字母){
if(manager1.indexOf(字母)>-1&&status.indexOf(字母)=-1)
计数=计数+字母
}
console.log('常用字符',计数);

console.log('Length',count.Length)这个问题可能有多个相关条件,比如同一字符的两次出现应计为1或2,大写和小写字符应视为相同或不相同,等等。我将在下面留下这个代码片段,以便您了解最终解决方案的要点。除此之外的任何条件,您都可以自己添加

var activeUserName=“JohnDoe100”;
var manager1=“JYZALoe999”;
让计数=0;
[…activeUserName].forEach(char1=>{
[…manager1].forEach(char2=>{
//在这里添加所有条件
if(char1==char2)
计数++;
});
});

控制台日志(计数)从字符中拆分数组中的检查字符串。如果str中包含一个char,则对其进行迭代并求和

var activeUserName=“JohnDoe100”;
var manager1=“JYZALoe999”;
功能检查3Chars(str,检查){
让计数=0;
check.split(“”).forEach(char=>{
if(str.indexOf(char)!=-1){
计数++;
}
});
返回计数>=3;
};
log(check3Chars(activeUserName,manager1))
下面是代码(与ES5兼容的版本)。它应该比其他答案更有效,因为它在找到3个字符后停止:

var activeUserName=“JohnDoe100”;
var manager1=“JYZALoe999”;
var matchedCharacters=[];
var activeUserNameArray=activeUserName.split(“”);
对于(var i=0;i-1//检查两个字符串是否都包含该字符
&&matchedCharacters.indexOf(activeUserNameArray[i])==-1//排除重复项,如果要计算重复项,可以删除此条件
) {
matchedCharacters.push(activeUserNameArray[i]);
}
}
console.log(matchedCharacters.length);
如果(matchedCharacters.length>=3){
//字符串至少有3个公共字符
}否则{
//字符串的公共字符少于3个
}
代码

//格式化字符串以便于比较检查
const prepareString=(str)=>str.split(“”.map((str)=>str.toLowerCase());
导出函数相似字符(主题、测试){
//准备主题字符串
const left=准备(主题);
//准备好的测试串
const right=准备(测试);
//以数字作为初始值映射主题,这将是我们的计数
返回左侧。减少((会计科目,当前)=>{
//acc是当前计数值
//curr是主题的当前字母
//如果右字符串出现当前字母,则在计数器中添加1
if(右索引OF(当前)>-1){
返回acc+1;
}
返回acc;
},0/*我们的初始计数器*/);
}
单元测试

description(“相似字符”,()=>{
每个都是([
[“你好”,“黄色”,4],
[“JYZALoe999”,“JohnDoe100”,3]
])(%s和%s有%p个相似字符,,(左、右、预期)=>{
expect(相似字符(左、右)).toEqual(预期);
});
});
对于您的用例:

const activeUserName=“JohnDoe100”;
const manager1=“JYZALoe999”;
const similarCount=similarCharacters(manager1,activeUserName)
如果(相似计数>=3){
//做点什么
}

CodeSandbox here:

已经有了一些很好的答案,只是想用一行不太老套或不太易读的句子加入我们的行列

const a=“JohnDoe100”;
const b=“JYZALoe999”;
const total=[…b].reduce((count,char)=>count+(a.includes(char)?1:0),0);
除了实际需要的
total
之外,它没有创建其他变量的好处。

使用for循环和break and Use includes() 要保持清洁,请创建一个可以完成此工作的函数

要想获得efficent效果,请在找到3个匹配字符时使用
break

宁愿使用
var
、使用
const
let

const areStringsMatchCharsMoreThen2 = (stringA, stringB) => {
  let count = 0;
  for (let i = 0; i < stringB.length; i++) {
    if (count === 3) break;
    if (stringA.includes(stringB.charAt(i))) count++;
  }
  return count === 3;
}
const areStringsMatchCharsMoreThen2=(stringA,stringB)=>{
让计数=0;
for(设i=0;i