Javascript 从两个阵列中删除重复的数字

Javascript 从两个阵列中删除重复的数字,javascript,for-loop,duplicate-removal,Javascript,For Loop,Duplicate Removal,我知道你可以从数组中删除1个重复的数字,但是有没有一种方法可以删除重复的数字?到目前为止,下面的代码是我所拥有的。如果它们相等,我想使用for循环从数组中删除数字,但我认为我没有正确编码,或者编码不完整。我希望它返回[3,4,5] function sym(args) { var array = []; var join; for(var i = 0; i < arguments.length; i++){ array.push(arguments[i]);

我知道你可以从数组中删除1个重复的数字,但是有没有一种方法可以删除重复的数字?到目前为止,下面的代码是我所拥有的。如果它们相等,我想使用for循环从数组中删除数字,但我认为我没有正确编码,或者编码不完整。我希望它返回[3,4,5]

function sym(args) {
  var array = [];
  var join;
    for(var i = 0; i < arguments.length; i++){
      array.push(arguments[i]);
      join = array[0].concat(array[1]); 
    } 
  join.sort();
    for(var j = 0; j < join.length; j++) {
      if(join[j] === join[j+1]) {

        var removed = join.splice(j, join[j+2]);                 
        console.log(removed);
      }

    }  

  return join;

}

sym([1, 2, 3], [5, 2, 1, 4]);
功能符号(args){
var数组=[];
var连接;
for(var i=0;i
这是我的看法

function sym() {
  var vals = {};
  var rarray= [];
  var a=arguments;
  for (var i=0,l=a.length;i<l;i++) {
    if (a[i] instanceof Array) {
      for (var n=0,ln=a[i].length;n<ln;n++) {
        vals[a[i][n]]=vals[a[i][n]]||[];
        vals[a[i][n]].push(a[i][n]);
      }
    }
  }
  for (var i in vals) {
    if (vals.hasOwnProperty(i)) {
      if (vals[i].length===1)
        rarray.push(i);
    }
  }
  return rarray;
}

我喜欢蜡笔暴力的解决方案,但我不认为在你可以简单地数一数的情况下维护重复项目的数组有什么意义

这将大大提高性能(),同时简化代码

function sym() {
  var occurrences = {};
  var inputArrays = arguments;
  var uniqueItems = [];

  function addOccurrences(arr) {
    for (var i = 0, len=arr.length; i < len; i++) {
      occurrences[arr[i]] = 1 + (occurrences[arr[i]] || 0);
    }
  }

  for (var i=0, len=inputArrays.length; i < len; i++) {
    if (inputArrays[i] instanceof Array) {
      addOccurrences(inputArrays[i]);
    }
  }

  for (var item in occurrences) {
    if (occurrences[item] === 1) {
        uniqueItems.push(item);
    }
  }
  return uniqueItems;
}

向投票关闭的人发送的可能重复项:他不是要求删除重复项:如果存在多个可能重复项,他要求删除所有的
n
。有些人(显然包括我自己,从我自己的答案来看)太过关注增长率,太快地避开了干净/简单的排序解决方案(在大多数实际情况下,排序解决方案也更快!)完全喜欢它。这里我唯一要注意的是数组边界检查:如果排序将
未定义的
发送到数组的任意一端,它将被错误地删除。@DRobinson我同意
未定义的
,但我(根据问题)假设数组中只填充了数字。
function sym() {
  var occurrences = {};
  var inputArrays = arguments;
  var uniqueItems = [];

  function addOccurrences(arr) {
    for (var i = 0, len=arr.length; i < len; i++) {
      occurrences[arr[i]] = 1 + (occurrences[arr[i]] || 0);
    }
  }

  for (var i=0, len=inputArrays.length; i < len; i++) {
    if (inputArrays[i] instanceof Array) {
      addOccurrences(inputArrays[i]);
    }
  }

  for (var item in occurrences) {
    if (occurrences[item] === 1) {
        uniqueItems.push(item);
    }
  }
  return uniqueItems;
}
function sym() {
  var inputArrays = _.filter(arguments, _.isArray);
  var occurrences = {};

  function addOccurrences(arr) {
    _.forEach(arr, function(item){
      occurrences[item] = 1 + (occurrences[item] || 0);
    });
  }

  _.forEach(inputArrays, addOccurrences);

  // Select the items with one occurence, return the keys (items)
  return _.filter(_.keys(occurrences), function(item){ 
    return occurrences[item] === 1; 
  });
}
var sym = function (ar1, ar2) {
    return ar1
        .concat(ar2)
        .sort(function (a, b) { return a - b; })
        .filter(function (elem, i, ar) {
            return ar[i-1] !== elem && ar[i+1] !== elem;
        });
    }