2017-01-14 3 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"]

Я пытался немало найти на Google, но никто не возвращает ожидаемый результат. Проблема, похоже, связана с алгоритмами, которые проходят через каждую букву, а затем обрабатывают результат. Мне нужно что-то, что учитывает случай, когда каждая буква может появляться несколько раз и вычисляет разницу в том, сколько раз это происходит на самом деле.

Любые подсказки?

+1

добавьте результат, вы ожидаете, и код, вы пробовали. –

+0

Я думаю, что вы хотите arra = [aabc]; arrb = [abcde] - diff is [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 Вы нашли этот ответ полезным? Это то, что вы имели в виду? –

 Смежные вопросы

  • Нет связанных вопросов^_^