Javascript 有没有办法过滤掉数组中多次出现的元素?
我正在学习在freecodecamp上编码,我的任务是完成一项任务。给你 创建一个函数,该函数接受两个或多个数组并返回对称差分数组(△ 或⊕) 提供的阵列的名称 给定两个集合(例如集合A={1,2,3}和集合B={2,3,4}), 两个集合的数学术语“对称差”是 两个集合中的任何一个,但不同时在两个集合中的元素(A△ B= C={1,4})。对于每一个额外的对称差(比如 在集合D={2,3})上,您应该获得包含以下元素的集合 在两个集合中的任何一个集合,但不是两个集合(C△ D={1,4}△ {2, 3} = {1,2,3,4}) 我尝试的是将arguments对象的所有元素合并。我尝试使用本机筛选方法筛选出数组中出现多次的元素。下面是我目前尝试的内容Javascript 有没有办法过滤掉数组中多次出现的元素?,javascript,Javascript,我正在学习在freecodecamp上编码,我的任务是完成一项任务。给你 创建一个函数,该函数接受两个或多个数组并返回对称差分数组(△ 或⊕) 提供的阵列的名称 给定两个集合(例如集合A={1,2,3}和集合B={2,3,4}), 两个集合的数学术语“对称差”是 两个集合中的任何一个,但不同时在两个集合中的元素(A△ B= C={1,4})。对于每一个额外的对称差(比如 在集合D={2,3})上,您应该获得包含以下元素的集合 在两个集合中的任何一个集合,但不是两个集合(C△ D={1,4}△ {
function sym() {
let args = Array.prototype.slice.call(arguments);
return args.reduce((prev,current) => prev.concat(current),[]) //concat all arguments
.filter((element, index, array) => array.indexOf(element) !== index);
}
有人能帮我看一下吗?非常感谢!您可以先过滤
a
,然后过滤b
,并计算结果
功能对称性差异(a,b){
函数未插入(集合){
返回函数(值){
返回集合。indexOf(值)=-1;
}
}
返回a.filter(isNotInSet(b)).concat(b.filter(isNotInSet(a));
}
log(对称性差异([1,2,3],[2,3,4]);//[1,4]
log(symetraldifference([1,4],[2,3]);//[1,4,2,3]
我认为这一个适合您
function set() {
let args = Array.prototype.slice.call(arguments);
return args
.reduce((prev, next) => prev.concat(next), [])
.sort((a, b) => a - b)
.filter( (el, i, array) => {
if(i === 0) return true;
if(el !== array[i-1]) {
if(el !== array[i+1]) return true;
}
});
}
逻辑是:首先,我们需要将所有数组合并为一个数组,并对其进行排序,这样我们就有了升序的整数,比如说[1,2,2,3,4,5,5]
。然后在这个整数列表中,如果某个整数出现多次,那么我们就有两个或多个原始数组,所以我们需要过滤掉它们
结果如下:
set([1,2,3], [2,3,4]);
> [1,4]
它适用于两个以上的输入阵列,正如您的任务所述:
创建一个包含两个或多个数组的函数
不过,您应该在这里进行类型检查和其他错误处理工作
注意,这只适用于整数。
对于整数数组的排序,请参见
希望这有帮助。
console.log(sym([1,2,3],[5,2,1,4]))
函数sym(){
变量计数={}
对于(var i=0;i我建议
1) 使用filter和indexOf查找重复项列表,然后
2) 使用筛选和排序返回最终结果,如下所示:
function symmetricalDiff(a, b){
var common = a.concat(b)
.filter(function(d, index, inputArray){
return inputArray.indexOf(d) != index
});
return (common.length==0) ? a.concat(b).sort() :
a.concat(b).filter(function(d){ return !common.includes(d)}).sort();
}
console.log(symmetricalDiff([1,2,3], [2,3,4])); // [1, 4]
console.log(symmetricalDiff([1,4], [2,3])); // [1, 4, 2, 3]
多么优雅的解决方案!非常感谢!
function symmetricalDiff(a, b){
var common = a.concat(b)
.filter(function(d, index, inputArray){
return inputArray.indexOf(d) != index
});
return (common.length==0) ? a.concat(b).sort() :
a.concat(b).filter(function(d){ return !common.includes(d)}).sort();
}
console.log(symmetricalDiff([1,2,3], [2,3,4])); // [1, 4]
console.log(symmetricalDiff([1,4], [2,3])); // [1, 4, 2, 3]