腾讯

  • 请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。

  解析:方法一:我的想法是arr指向原数组,然后再复制arr数组得到newarr这个是用来最终返回的。让原数组的每一项(外循环)去对比newarr中每一项(内循环),若第一次找到相同的则k++,下次再遇到相同的即k>1时立即删除该项。这里k起的是计数的作用,还是挺重要的,每次新的元素比较时清零k。

 1 Array.prototype.removeRepeat=function(){
 2   var arr=this;
 3   var newarr= arr.slice(0),k;
 4   for(var j=0;j<arr.length;j++){
 5     k=0;
 6     for(var i=0;i<newarr.length;i++){
 7        if(arr[j]==newarr[i]){
 8           k++;
 9           if(k>1){
10             newarr.splice(i,1);
11           }
12        }
13     }
14     
15   }
16   return newarr;
17 }

 方法二:对数组一排序,这样就按数字一样的在一起了。例如var a=[4,6,35,65,35,9,6],a.sort()后a变为[35, 35, 4, 6, 6, 65, 9],然后依次循环搞定,只判断相邻两元素是否相等

1 Array.prototype.rem=function(){
2   var a=this;
3   a=a.sort();
4   for(var i=1;i<a.length;){
5      if(a[i]==a[i-1]){ a.splice(i,1);i=i;}
6     else{i++}
7    }
8  return a;
9  }

 好吧我貌似题没看清,要求返回包含被删除的重复条目的数组:push要放在删除之前

1 Array.prototype.rem=function(){
2   var a=this,b=[];
3   a=a.sort();
4   for(var i=1;i<a.length;){
5      if(a[i]==a[i-1]){ b.push(a[i]);a.splice(i,1);}
6     else{i++}
7    }
8  return b;
9  }

方法三:最近在整理正则方面的知识,突然想到通过正则匹配也可以完成该题目,但是效率慢下来了,因为每次都会从头开始正则匹配,正则表达式还需得优化一下。

Array.prototype.remove=function(){
//将数组转化成用空格间隔的字符串
var str=this.join(' '),re;
 
//以空格为边界匹配,捕获组$2为重复的元素,如:
/((d+).*?)2/.exec('3 5 34 3 6');//["3 5 34 3", "3 5 34 ", "3"]
var p=/((d+).*?)2/;
   var arr=[];
   while(1){
//终止循环匹配条件
if(str.search(p)!=-1){ re=str.replace(p,RegExp.$1.trim());//对捕获组$1去除两边空格($系列是RegExp构造函数上的属性),用处理后的不重复字符串替换匹配的项 arr.push(RegExp.$2); 将重复的元素送入数组。缺点是送入数组的元素可能会重复,如果需要可以再处理该数组。 str=re; }else{ break; } } console.log('被删除的',arr); return str.split(' '); }
  • 请填充代码,使mySort()能使传入的参数按照从小到大的顺序显示出来。

解析:在用arguments之前我先判断了下arguments是不是数组,Object.prototype.toString.call(arguments)结果输出 [object Arguments] 看来并不是数组,不过倒是可以用 Array.prototype.sort.call(arguments[0]) 来做该题,要注意如果调用函数 mySort(arr) 传入数组的话函数里要用arguments[0]

 1 function mySort(){
 2   var tags=new Array();
 3   for(var i=0;i<arguments.length;i++){
 4      tags.push(arguments[i]);
 5   }
 6   tags.sort(function(x,y){
 7      if(x>y) return 1;
 8      else if(x<y) return -1;
 9      else return 0
10   });
11   return tags;
12 }
1 function mySort(){
2  Array.prototype.sort.call(arguments[0],function(x,y){
3     if(x>y) return 1;
4     else if(x<y) return -1;
5     else return 0
6   })
7 }
原文地址:https://www.cnblogs.com/venoral/p/5211690.html