2016-08-05 92 views
2

您好我需要比較兩個字符串,但沒有看到排列如何在JavaScript中比較兩個字符串,忽略字符排列

一樣,如果string1爲

var a="apple#1;banana#2;orange#3" 

和String2的是

var b="banana#2;orange#3;apple#1" 

a.compare(b)應該是正確的,因爲數值相同只是排列不同

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"); 
     } 
} 
+0

你的意思是實際字符排列或項目的安排?忽略字符排列''annaba#1; norage#2; pleap#3''會匹配。 –

+0

沒有第一個將是好的蘋果將是蘋果,但#後有唯一標識符,所以必須匹配 – Tanmay

回答

2

我覺得@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 

兩個字符串在它們中都有相同的字符,但它們絕對不是你想要的方式。

5

這裏是一個班輪應該做的伎倆:

string.split('').sort().join('') 

這是通過轉將字符串轉換爲數組,對數組進行排序,然後摺疊回字符串(按字符排序)。您可以在兩個字符串運行和比較

console.log(a.split('').sort().join('') == b.split('').sort().join('')) // true 

您可以使用ES6和字符串強制讓它多一點簡潔:

[...a].sort()+'' === [...b].sort()+'' 
+0

嗨,謝謝我檢查這與我的代碼,如果它的作品將讓你知道謝謝反正 – Tanmay

+0

這在某些情況下不起作用。請看下面的答案 – mcgraphix

+0

因此,'foo; bar'與'abr; oof'是「相等的」嗎? – georg

1

由於您實際上正在比較,爲什麼不明確使用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)