Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.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_Functional Programming_Underscore.js - Fatal编程技术网

Javascript 在下划线中重写交集-理解参数数组

Javascript 在下划线中重写交集-理解参数数组,javascript,functional-programming,underscore.js,Javascript,Functional Programming,Underscore.js,我在下面编写的函数是下划线的交集,是从头重新编写的。目前,这只适用于两个阵列。我如何才能让它按原样工作,但要有任意数量的参数 _.intersection = function() { var argumentsArray = Array.prototype.slice.call(arguments); return _.filter(argumentsArray[0], function(val) { re

我在下面编写的函数是下划线的交集,是从头重新编写的。目前,这只适用于两个阵列。我如何才能让它按原样工作,但要有任意数量的参数

  _.intersection = function() {

            var argumentsArray = Array.prototype.slice.call(arguments);

            return _.filter(argumentsArray[0], function(val) {
                return _.indexOf(argumentsArray[1], val) != -1
            });

        };

可以对参数数组执行reduce操作,如下所示:

_.intersection = function() {
  var argumentsArray = Array.prototype.slice.call(arguments);

  return _.reduce(argumentsArray, function (intersectedArray, currentArray) {
    return _.filter(intersectedArray, function(val) {
      return _.indexOf(currentArray, val) !== -1
    });
  });
};
查看演示。

这不是我的工作

 var alpha = [1, 2, 3, 4, 5, 6],
        beta = [4, 5, 6, 7, 8, 9];

    $.arrayIntersect = function(a, b)
    {
        return $.grep(a, function(i)
        {
            return $.inArray(i, b) > -1;
        });
    };

    window.console && console.log( $.arrayIntersect(alpha, beta) );
function unionArray(...arr){
    let union = new Set(arr);
    return union;
}


function Intersection(a,b){

    var a = new Set(a);
    var b = new Set(b);
    let union = new Set( [...a].filter(x => b.has(x)));
    return union;
}


function Difference(a,b)  {
    var a = new Set(a);
    var b = new Set(b);
    let union = new Set( [...a].filter(x => !b.has(x)));
    return union;
}