js数组去除重复方法添加

试题:
有这样一个数组,成员都是数字,例如
var a = [1,2,3,4,5,2,3,4,6,7,8];
请实现a.distinct()方法,用来给数组a去掉重复值,要求对Array的原型进行扩展方法,并尽可能做到效率最优。

考察点:
1,考察应试者是否理解原型链
2,考察应试者是否由意识的控制算法的时间复杂度,了解应试者对专业课知识的掌握程度
3,考察应试者对js数组函数的了解程度

答案1:

Array.prototype.distinct = function(){
         var a = [],b=[],oa = this.concat();// 将原来数据赋值给oa数组
         for(var i = 1;i-1)continue;//如过下表j在数组b中跳出当前循环
                         if(oa[j] == oa[ i]){  
                                 b.push(j);
                         }
                 }
         }
         this.splice(0,this.length);//将原数组清空成为空数组
         for(var i = 0;i-1) continue;
                 this.push(oa[i ]);
         }
         return this;
  };


答案2:

Array.prototype.distinct = function(){
         for(var i = 0;i< 0){
                         this.splice(i,1,n);//不存在重复
                 }else{
                         this.splice(i,1);//存在重复
                 }
         }
         return this;
  };

答案3:

Array.prototype.distinct = function(){
         var self = this;
         var _a = this.concat().sort();
         _a.sort(function(a,b){
                 if(a == b){
                         var n = self.indexOf(a);
                         self.splice(n,1);
                 }
         });
         return self;
  };

得分点:
1,应试者起码应该自觉通过Array.prototype.distince来实现函数,若没有这样做,则扣分50%
2,应试者起码会给出答案1,得分30%,如果没有使用splice和concate,扣分20%
3,给出答案2的,得分80%,算法复杂度控制在O(n)

4,给出答案3的,得满分,算法复杂度控制在O(1)  

  其他方法:

Array.prototype.deleteEle=function(){
       var arr=this,o={},newArr=[],i,n;
       for( i=0;i
               n=arr[i]+typeof(arr[i]);//如果不需要类型判断,直接将后面的去掉即可
               if(typeof(o[n])==="undefined"){
                       newArr[newArr.length]=arr[i]
                       o[n]=1;//缓存
               }
       }
       return newArr;
}
var x= [1,2,3,4,5,2,3,4,6,7,8];
document.write('原始数组:'+x);
document.write("
");
document.write('去重复后:'+x.deleteEle());
  Array.prototype.distinct=function(){
var a=[],b=[];
for(var prop in this){
     var d = this[prop];
     if (d===a[prop]) continue; //防止循环到prototype
     if (b[d]!=1){
       a.push(d);
       b[d]=1;
     }
}
return a;
}
var x=['a','b','c','d','b','a','e','a','b','c','d','b','a','e'];
document.write('原始数组:'+x);
document.write("
");
document.write('去重复后:'+x.distinct());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了去除动态数组中的重复元素,有几种方法可以使用。以下是其中的几种方法方法一:使用Set 通过将动态数组转换为Set,可以自动去除其中的重复元素。Set是一种无序且不重复的数据结构。你可以通过将动态数组转换为Set,然后再将其转回数组来实现去重的目的。 方法二:使用filter和indexOf 使用filter和indexOf组合的技巧可以实现去除动态数组中的重复元素。你可以通过定义一个过滤器函数,在每次遍历数组时检查元素是否已经在结果数组中。如果元素已经存在,则忽略它;如果元素不存在,则将其添加到结果数组中。 方法三:使用reduce和includes 使用reduce和includes方法也可以实现去除动态数组中的重复元素。你可以通过定义一个累加器函数,在每次遍历数组时检查元素是否已经在累加器中。如果元素已经存在,则忽略它;如果元素不存在,则将其添加到累加器中。 以上是几种常见的方法,你可以根据具体情况选择最适合的方法去除动态数组中的重复元素。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [JavaScript移除数组重复元素的方法](https://download.csdn.net/download/weixin_38641764/13034334)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [LabVIEW 删除数组重复元素实例](https://download.csdn.net/download/wzw_8888/13210989)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值