2017-01-14 92 views
0

我需要能夠比較兩個數組中包含單個字符字母的數組之間的差異,並在每個數組中出現多次。比較兩個單字符數組並返回差異?

例子:

arr_a = ["E", "F", "X", "O", "U", "R", "T", "I", "D", "E", "N", "G", "Ø", "M", "F", "Æ", "A", "M", "Ø", "R", "Å", "N", "D", "E", "D", "R", "A", "_", "S", "E", "L", "U", "V"]

arr_b = ["E", "F", "X", "O", "U", "R", "T", "I", "D", "E", "N", "G", "Ø", "M", "F", "Æ", "A", "M", "Ø", "R", "Å", "N", "D", "E", "D", "R", "A", "G", "S", "E", "L", "U", "V", "O", "I", "A", "R", "E", "S", "E"]

我已經嘗試了不少對谷歌發現,但沒有返回預期的結果。問題似乎是循環遍歷每個字母的算法,然後處理結果。我需要考慮每個字母可能出現多次的情況,並計算實際發生次數的差異。

任何提示?

+1

請加的結果,您期望,和代碼,你試過。 –

+0

我想你想要arra = [aabc]; arrb = [abcde] - diff是[ade],是你想要的。 –

回答

-1

將它們轉換爲一個(char - > number)對象怎麼樣?

var keys={}; 
arr1.forEach(function(e){ 
    keys[e]=keys[e]||0; 
    keys[e]++; 
} 
arr2.forEach(function(e){ 
    keys[e]=keys[e]||0; 
    keys[e]--; 
} 
console.log(keys); 

鍵將包含兩個數組中鍵的外觀之間的差異。喜歡的東西:

"A":0, // A appears equal in both 
"B":1, //B appears one more time in arr1 then in arr2 
"C":-2 //C appears 2 times more in arr2 then in arr1 

或者,如果你想找到ARR2相比ARR1作爲字符數組的區別,做到:

var diff=arr2.map((e,i)=>e==arr1[i]?undefined:e); 
0

你可以在同一位置查看每個字符,並只返回不同的部分。

function getDifference(first, second) { 
 
    var min = Math.min(first.length, second.length), 
 
     i = 0, 
 
     result = []; 
 

 
    while (i < min) { 
 
     if (first[i] !== second[i]) { 
 
      result.push(first[i], second[i]); 
 
     } 
 
     ++i; 
 
    } 
 
    return result.concat(first.slice(min), second.slice(min)); 
 
} 
 

 
var arr_a = ["E", "F", "X", "O", "U", "R", "T", "I", "D", "E", "N", "G", "Ø", "M", "F", "Æ", "A", "M", "Ø", "R", "Å", "N", "D", "E", "D", "R", "A", "_", "S", "E", "L", "U", "V"], 
 
    arr_b = ["E", "F", "X", "O", "U", "R", "T", "I", "D", "E", "N", "G", "Ø", "M", "F", "Æ", "A", "M", "Ø", "R", "Å", "N", "D", "E", "D", "R", "A", "G", "S", "E", "L", "U", "V", "O", "I", "A", "R", "E", "S", "E"]; 
 

 
console.log(getDifference(arr_a, arr_b));
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

這似乎返回9個值,即使計數只有7個。 – blaasvaer

+0

@blaasvaer,請添加通緝令結果到您的問題。 –

0

我已經實現了你一樣需要代碼。

arr_a = ["E", "F", "X", "O", "U", "R", "T", "I", "D", "E", "N", "G", "Ø", "M", "F", "Æ", "A", "M", "Ø", "R", "Å", "N", "D", "E", "D", "R", "A", "_", "S", "E", "L", "U", "V"] 
 

 
arr_b = ["E", "F", "X", "O", "U", "R", "T", "I", "D", "E", "N", "G", "Ø", "M", "F", "Æ", "A", "M", "Ø", "R", "Å", "N", "D", "E", "D", "R", "A", "G", "S", "E", "L", "U", "V", "O", "I", "A", "R", "E", "S", "E"] 
 

 
a_json = {}; 
 
b_json = {}; 
 

 
arr_a.forEach(function (element){ 
 
\t if(a_json.hasOwnProperty(element)){ 
 
\t \t a_json[element]++; 
 
\t } 
 
\t else{ 
 
\t \t a_json[element] = 1; 
 
\t } 
 
}); 
 

 
arr_b.forEach(function (element){ 
 
\t if(b_json.hasOwnProperty(element)){ 
 
\t \t b_json[element]++; 
 
\t } 
 
\t else{ 
 
\t \t b_json[element] = 1; 
 
\t } 
 
}); 
 

 
diff_json = {}; 
 
keys_a = Object.keys(a_json); 
 

 
keys_a.forEach(function(key_a){ 
 
\t if(b_json.hasOwnProperty(key_a)){ 
 
\t \t diff_json[key_a] = Math.abs(a_json[key_a] - b_json[key_a]); 
 
\t } 
 
}); 
 

 
console.log(diff_json)

+0

@blaasvaer你覺得這個答案有用嗎?這是你的意思嗎? –

相關問題