我正在尝试找出对称的解决方案
使用 javascript 完成以下任务的差异
目标:
- 接受未指定数量的数组作为参数
- 保留数组中数字的原始顺序
- 不删除单个数组中数字的重复项
- 删除数组中出现的重复项
因此,例如,
如果输入是 ([1, 1, 2, 6], [2, 3, 5], [2, 3, 4]),
解为 [1, 1, 6, 5, 4]。
我正在尝试解决这个问题,这是网上提出的挑战
编码社区。挑战的具体说明
状态,
创建一个接受两个或多个数组并返回一个数组的函数
所提供数组的对称差。
数学术语对称差指的是元素
属于第一组或第二组但不属于两者的两组。
虽然我下面的解决方案找到了数字
每个数组都是唯一的,它消除了所有出现的数字
超过一次并且不保持数字的顺序。
我的问题与以下问题非常接近在javascript中查找多个数组中的对称差异/唯一元素 https://stackoverflow.com/questions/30468692/finding-symmetric-difference-unique-elements-in-multiple-arrays-in-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]