• 腾讯


    • 请给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 }
  • 相关阅读:
    CSS 权威指南 CSS实战手册 第四版(阅读笔记)
    iframe交互(一)父页面自动高度
    连接微服务
    学习SQLYog
    sourceTree的安装以及破解
    sql 根据子级ID获取所有父级
    新手Python入门安装(一)
    C# 真正完美的 汉字转拼音
    供应链相关的书和博客
    网易跟帖为什么火
  • 原文地址:https://www.cnblogs.com/venoral/p/5211690.html
Copyright © 2020-2023  润新知