Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:多个参数的并集_Javascript_For Loop - Fatal编程技术网

Javascript:多个参数的并集

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++){

我想写一个函数,返回传递的数组参数的并集

我不想使用递减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++){
        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;
    }
}