Javascript:多个参数的并集
我想写一个函数,返回传递的数组参数的并集 我不想使用递减while语句,也不想使用下划线联合函数 并集([1,4,78,98],[45,56,3],[2,3,45]) 返回-->[1,4,78,98,45,56,2] 这是我目前掌握的情况,但并不正确:Javascript:多个参数的并集,javascript,for-loop,Javascript,For Loop,我想写一个函数,返回传递的数组参数的并集 我不想使用递减while语句,也不想使用下划线联合函数 并集([1,4,78,98],[45,56,3],[2,3,45]) 返回-->[1,4,78,98,45,56,2] 这是我目前掌握的情况,但并不正确: union: function(){ var i, j, k; var newArray = []; for(i = 0; i < arguments.length; i++){
union: function(){
var i, j, k;
var newArray = [];
for(i = 0; i < arguments.length; i++){
j = arguments[i];
l = k[arguments[i]];
for (){
j = k[i];
newArray.push(j);
}
}
return newArray;
}
union:function(){
变量i,j,k;
var newArray=[];
对于(i=0;i
我希望能找到一个具有多个for循环的解决方案。想法是先展平,然后删除重复项。在功能性风格中,您可以执行以下操作:
function union() {
var arrs = [].concat.apply([], arguments);
return arrs.filter(function(v, i) {
return arrs.indexOf(v) == i;
});
}
这将给出与下划线的联合
相同的结果
演示:您可以使用.reduce()
如果您愿意,可以将其拆分:
function union() {
return [].reduce.call(arguments, function(res, arr) {
return res.concat(arr.filter(notIn(res)))
})
}
function notIn(arr) {
return function(item) {
return arr.indexOf(item) === -1;
}
}
当然,您也可以重用
.reduce()
回调函数,这样,如果您实际上有一个数组,您就可以执行以下操作:
var res = arrays.reduce(joinUnique);
function joinUnique(res, arr) {
return res.concat(arr.filter(notIn(res)))
}
function notIn(arr) {
return function(item) {
return arr.indexOf(item) === -1;
}
}
最简单的方法就是使用
const data=新集合([…[1,4,78,98],…[45,56,3],…[2,3,45]);
data.forEach(i=>console.log(i))代码>你得到了什么结果?为什么不正确?
var res = arrays.reduce(joinUnique);
function joinUnique(res, arr) {
return res.concat(arr.filter(notIn(res)))
}
function notIn(arr) {
return function(item) {
return arr.indexOf(item) === -1;
}
}