是否可以稍微修改我的对称差分函数,使其可以接受未知数量的参数?

Is it possible to slightly modify my symmetric difference function so that it can accept an unknown number of arguments?

我在尝试查找包含两个或多个数组的对称差异的数组时创建了此代码笔 http://codepen.io/PiotrBerebecki/pen/ZWxvzm

我的函数工作正常,但前提是传递了四个参数。如何修改我的函数,使其可以接受未知数量的参数?有一个潜在的可重复代码块,它可能是 for 循环或 reduce / map 方法的一部分。我不知道如何做到这一点。

symmetricDifference([1,2,3,4], [3,4,5,6], [2,4,6,7], [8,9])
// should return an array containing [1,4,5,7,8,9]

symmetricDifference([1,2,3,4], [3,4,5,6])
// should return an array containing [1,2,5,6]

var arrA = [1,2,3,4];
var arrB = [3,4,5,6];
var arrC = [2,4,6,7];
var arrD = [8,9];

function symmetricDifference(arr) {
  let args = Array.prototype.slice.call(arguments);
  let result = [];

  result = args[0].concat(args[1]).filter(function(item) {
    return args[0].indexOf(item) === -1 || args[1].indexOf(item) === -1;
  });

  result = result.concat(args[2]).filter(function(item) {
    return result.indexOf(item) === -1 || args[2].indexOf(item) === -1;
  });

  result = result.concat(args[3]).filter(function(item) {
    return result.indexOf(item) === -1 || args[3].indexOf(item) === -1;
  });

  return result;
}

感谢@Bergi 的提示,我引入了一个 for 循环和一个初始值 var result = args[0]; 该函数现在可以正常工作,因为它接受未知数量的参数。我已经更新了原始代码笔 (http://codepen.io/PiotrBerebecki/pen/ZWxvzm) 来演示此实现。

function symmetricDifference(arr) {
  let args = Array.prototype.slice.call(arguments);
  let result = args[0];
  for (var i = 1; i < args.length; i++) {
    result = result.concat(args[i]).filter(function(item) {
      return result.indexOf(item) === -1 || args[i].indexOf(item) === -1;
    });
  }
  // remove duplicates and sort
  return Array.from(new Set(result)).sort((a, b) => a - b);
}