2017-01-14 4 views
0

私は、各配列に複数の文字が現れる2つの配列を比較し、その違いを得る必要があります。1文字の2つの配列を比較し、その違いを返しますか?

例:

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"]

私はGoogleで見つけたかなりの数を試してみたが、どれも期待される結果を返しません。この問題は、各文字をループして結果を操作するアルゴリズムのようです。私は、各文字が複数回出現するケースを考慮に入れて、何回実際に何回起こったのかを計算する必要があります。

ヒント

+1

結果を追加し、あなたが期待する、とコードしてください、あなたは試してみました。 –

+0

あなたはarra = [aabc]がほしいと思う。 arrb = [abcde] - diffは[ade]です。あなたが望むものですか? –

答えて

-1

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); 

キーには、2つの配列のキーの外観の違いが含まれます。

"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

これは、カウントがわずか7で変化しても、9個の値を返すようです。 – 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この回答は役に立ちましたか?これはあなたが何を意味していますか? –

関連する問題