[英]How to compare two string in javascript neglecting character arrangement
嗨,我需要比较两个字符串,但没有看到安排
就像string1一样
var a="apple#1;banana#2;orange#3"
和String2是
var b="banana#2;orange#3;apple#1"
a.compare(b)应该给出true,因为值相同,只是排列不同
if(!a.compare(b)){
alert("not matched");
}
else{
alert("matched");
}
我做了一个,但它太冗长的代码我在这里分享它:
function ReturnCollection (str){
var arr=str.split(';');
var returnarr=[];
for(var i=0;i<arr.length;i++){
var indx=arr[i].indexOf('#');
var text=arr[i].substr(0,indx);
var val=arr[i].substr(indx+1);
returnarr.push([text,val]);
}
return returnarr;
}
function Matching(){
var afinal=ReturnCollection(a);
var bfinal=ReturnCollection(b);
bflag=false;
outerloop:
for(i=0;i<afinal.length;i++){
for(j=0;j<bfinal.length;j++){
if(bfinal[j][1] === afinal[i][1]){
continue outerloop;
}
}
bflag=true;
break outerloop;
}
if(bflag){
alert("not matched");
}
}
这是一个应该做的伎俩:
string.split('').sort().join('')
这可以通过将字符串转换为数组,对数组进行排序然后折叠回字符串(按字符排序)来实现。 您可以在两个字符串上运行它并进行比较
console.log(a.split('').sort().join('') == b.split('').sort().join('')) // true
你可以使用ES6和字符串强制来使它更简洁:
[...a].sort()+'' === [...b].sort()+''
我认为@Rob是在正确的道路上,但我会将它拆分为分号:
var a="apple#1;banana#2;orange#3";
var b="banana#2;orange#3;apple#1"
console.log(a.split(";").sort().join(";") === b.split(";").sort().join(";"));
因为如果你只是把它拆分成一个空字符串,你会得到一个字符数组,但你真正想要的是一个单词数组,否则你也会这样:
var a = "apple#1;bananas#2;orange#3";
var b = "banana#2;orranges#3;apple#1";
console.log(a.split(";").sort().join(";") === b.split(";").sort().join(";")); //false
console.log(a.split("").sort().join("") === b.split("").sort().join("")); //true
两个字符串都有相同的字符,但它们绝对不是你想要的方式。
既然您实际上在比较集合 ,为什么不明确使用Set
?
var a = "apple#1;banana#2;orange#3" var b = "banana#2;orange#3;apple#1" var sa = new Set(a.split(';')) var sb = new Set(b.split(';')) areEqual = sa.size == sb.size && [...sa].every(x => sb.has(x)) console.log(areEqual)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.