我需要能够在两个包含单个字符字母的数组之间进行比较,并在每个数组中出现多次。
示例:
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上尝试了很多,但都没有返回预期的结果。问题似乎是循环遍历每个字母的算法,然后操纵结果。我需要一些考虑到每个字母可以多次出现的情况,并计算实际发生的次数的差异。
任何提示?
答案 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;
答案 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);