比较两个单个字符数组并返回差异?

时间:2017-01-14 12:38:23

标签: javascript arrays comparison

我需要能够在两个包含单个字符字母的数组之间进行比较,并在每个数组中出现多次。

示例:

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上尝试了很多,但都没有返回预期的结果。问题似乎是循环遍历每个字母的算法,然后操纵结果。我需要一些考虑到每个字母可以多次出现的情况,并计算实际发生的次数的差异。

任何提示?

3 个答案:

答案 0 :(得分: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));
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

答案 1 :(得分: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){
	if(a_json.hasOwnProperty(element)){
		a_json[element]++;
	}
	else{
		a_json[element] = 1;
	}
});

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

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

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

console.log(diff_json)

答案 2 :(得分:-1)

如何将它们转换为一个(char - &gt;数字)对象?

 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);
相关问题