我正在尝试使用实现以下目标的 javascript 找出对称差异的解决方案:
- 接受未指定数量的数组作为参数
- 保留数组中数字的原始顺序
- 不删除单个数组中数字的重复项
- 删除数组中出现的重复项
因此,例如,如果输入是 ([1, 1, 2, 6], [2, 3, 5], [2, 3, 4]),则解决方案将是 [1, 1, 6, 5 , 4]。
我正在尝试将其作为在线编码社区提出的挑战来解决。挑战状态的确切说明,
创建一个函数,该函数接受两个或多个数组并返回所提供数组的对称差的数组。
数学术语对称差是指两个集合中的元素,它们位于第一组或第二组中,但不在两者中。
尽管我在下面的解决方案找到了每个数组唯一的数字,但它消除了所有多次出现的数字并且不保持数字的顺序。
我的问题非常接近在 javascript 中查找多个数组中的对称差异/唯一元素时提出的问题。但是,该解决方案不保留数字的原始顺序,也不保留单个数组中出现的唯一数字的副本。
function sym(args){
var arr = [];
var result = [];
var units;
var index = {};
for(var i in arguments){
units = arguments[i];
for(var j = 0; j < units.length; j++){
arr.push(units[j]);
}
}
arr.forEach(function(a){
if(!index[a]){
index[a] = 0;
}
index[a]++;
});
for(var l in index){
if(index[l] === 1){
result.push(+l);
}
}
return result;
}
symsym([1, 1, 2, 6], [2, 3, 5], [2, 3, 4]); // => Desired answer: [1, 1, 6. 5. 4]