Sorted Union--多个数组按原顺序合并并去除重复值

程序实现要求为:写一个 function,传入两个或两个以上的数组,返回一个以给定的原始数组排序的不包含重复值的新数组。

实现思路为,传入的所有数组组合为一个数组,然后去重即可;

我的代码如下:

function unite(arr1, arr2, arr3) {
  var bigarr=[];
  //因为不确定拼接数组的个数,即不确定参数个数,所以用arguments来进行参数的遍历,把所有的数组组合为一个数组,
  for(var j=0,len=arguments.length;j<len;j++){
      bigarr = bigarr.concat(arguments[j]);
  }

  //数组去重的函数,新建一个数组,把原数组的元素一个一个放进去,若改元素已存在则不再放进去
  function unique(arr){   
    var newArr = [];
    for(var i=0,len1=arr.length;i<len1;i++){
      if(newArr.indexOf(arr[i])==-1){
        newArr.push(arr[i]);
      }
    }
    return newArr;
  }
 
  return  unique(bigarr);
}

unite([1, 3, 2], [5, 2, 1, 4], [2, 1]);

这样写呢,思路是对的,但是过程略微复杂了点,在js中有更精简的方法实现,即利用 Arguments object  和  Array.reduce(),

  • arguments 是一个类似数组的对象, 对应于传递给函数的参数。
  • arguments对象不是一个 Array 。它类似于数组,但除了 长度之外没有任何数组属性。可以使用  Array.from()方法或 spread 运算符将 arguments 转换为真正的数组:
  • 而数组中的reduce方法则可以进行数组拼接,然后用filter()方法进行数组去重即可;
    function unite(arr1, arr2, arr3) {
      var args = Array.from(arguments);
      var arr = args.reduce(function(prev,cur){
        return prev.concat(cur);
      });
      return arr.filter(function(item,index,arr){
        return arr.indexOf(item) === index;  
      });
    }
    unite([1, 3, 2], [5, 2, 1, 4], [2, 1]);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值