codecamp

数组去重算法挑战

方法一:

function unite(arr1, arr2, arr3) {
  var newArr = Array.from(arguments);      //使用arguments遍历所有数组,并且放入一个newArr中,这个时候newArr = [[arr1],[arr2],[arr3]]
  var arr = newArr.reduce(function(a,b){     //使用reduce遍历新数组,根据reduce的参数,a来表示上一次调用返回的值,b来表示正在处理的元素
    return a.concat(b);                                    //然后把b都拼接到a当中,最后返回的 arr = [arr1,arr2,arr3],合成了一个大数组,方便我们使用函数。
  });
  return arr.filter(function(element,index){     //最后使用filter遍历arr,根据filter的参数,element代表当前元素,index代表当前元素的索引。
    return arr.indexOf(element) == index;     //核心函数:filter筛选出当前函数 ==它当前的索引,比如上面第一例中,当element指向第一个2时,
  });                                                                   //index为2,这个indexOf的返回是正确的;而当element指向第二个2时,index变成了4,而
}                                                                       //arr.indexOf(element)返回的值还是2(查找到第一个2的索引并返回),所以这时候就把后面重复的
                                                                        //数都筛选去掉了。最后一步是关键点,而且也非常的巧妙。


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

方法二:

function unite() {
  var arr = [],
      rArr = [];
  for(var n=0;n<arguments.length;n++){
    arr.push(arguments[n]);
  }
  rArr = arr.reduce(function(a,b){
    var t = [];
    for(var i=0;i<b.length;i++){
      if(a.indexOf(b[i])<0){
        t.push(b[i]);
      }
    }
    return a.concat(t);
  },[]);
  return rArr;
}


unite([1, 3, 2], [5, 2, 1, 4], [2, 1]);
输入检查算法挑战
html符号转实体算法挑战
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

HTML5&CSS

JavaScript

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }