繁体   English   中英

如何比较javascript忽略字符排列中的两个字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM