`
sfgeeq1987
  • 浏览: 18828 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

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<oa.length;i++){
         for(var j = 0;j<i;j++){
             if(b.indexOf(j)>-1)continue;//如过下表j在数组b中跳出当前循环 
             if(oa[j] == oa[ i]){  
                 b.push(j);
             }
         }
     }
     this.splice(0,this.length);//将原数组清空成为空数组
     for(var i = 0;i<oa.length;i++){
         if(b.indexOf(i)>-1) continue;
         this.push(oa[i ]);
     }
     return this;
 };

答案2:

Array.prototype.distinct = function(){
     for(var i = 0;i<this.length;i++){
         var n = this[i ];
         this.splice(i,1,null);
         if(this.indexOf(n) < 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)  



 其他方法:

<SCRIPT LANGUAGE="JavaScript">

Array.prototype.deleteEle=function(){
    var arr=this,o={},newArr=[],i,n;
    for( i=0;i<arr.length;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("<br />");
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("<br />");
document.write('去重复后:'+x.distinct()); 
</script>
分享到:
评论

相关推荐

    js数组中去除重复值的几种方法

    在日常开发中,我们可能会遇到将一个数组中里面的重复值去除,那么,我就将我自己所学习到的几种方法分享出来  去除数组重复值方法:  1,利用indexOf()方法去除  思路:创建一个新数组,然后循环要去重的数组,...

    JavaScript几种数组去掉重复值的方法推荐

    下面小编就为大家带来一篇JavaScript几种数组去掉重复值的方法推荐。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看

    JavaScript去掉数组重复项的方法分析【测试可用】

    本文实例分析了JavaScript去掉数组重复项的方法。分享给大家供大家参考,具体如下: 利用JavaScript的object的特性,我们可以非常容易的实现将一个数组的重复项去掉。 object的特性是:key一定是唯一的。 把数组重复...

    javascript数组去掉重复

    我们给数组原型上面添加去重的方法distinct,用第一种很容易想到的方法来实现,当然也是很笨很直接的,把这个数组复制一份然后循环两个数组,对比当前值与后面所有的值是否相等,如果与后面所有值都不等则把该值存到...

    javascript数组去重常用方法实例分析

    数组去除重复值是面试常考内容,也是很容易用到的一个技巧,下面就几种去重的方法进行介绍。 首先是最常见的方法,也就是添加一个临时数组,将原数组遍历,加入临时数组,每次加入时判断待加入的元素是否存在于临时...

    JavaScript使用indexOf()实现数组去重的方法分析

    本文实例讲述了JavaScript使用indexOf()实现数组去重的方法。分享给大家供大家参考,具体如下: 数组去重方法有多中,这里列举出自己认为比较容易理解的方法. 思路: 1. 创建一个新的空数组,用来存放去重后的新数组. ...

    求两个数组的交集,配合去重方法使用.html

    // 给res去掉重复的数据 var res1 = res.reduce(function (pre, cur) { //给pre 赋值一个[] // 等于-1说明cur不存在与pre中 if (pre.indexOf(cur) === -1) { return pre.concat(cur) } else { return pre }...

    ES5 ES6中Array对象去除重复项的方法总结

    数组去重本身算法不是很难,但是在 JavaScript 中很多人会忽视 NaN 的存在,因为在 JS 中 NaN !== NaN 。但是在去重中我们又不能保留两个 NaN ,所以需要进行一下判断,这是很多人容易忽视的。 ES5的实现如下: 代码

    javascript入门笔记

    Javascript,简称为 JS,是一款能够运行在 JS解释器/引擎 中的脚本语言 JS解释器/引擎 是JS的运行环境: 1、独立安装的JS解释器 - NodeJS 2、嵌入在浏览器中的JS解释器 JS的发展史: 1、1992年 Nombas 开发...

    Python列表去重复项的N种方法(实例代码)

    在实际编程中,经常会遇到数组或列表去掉重复项,保持成员唯一性。实现方式有多种,比如新建列表来存储非重复项,或者在原有基础上删除掉重复的项,也可以利用数据结构来达到去重复。具体哪一种方法更好呢?以下约20...

    程序天下:JavaScript实例自学手册

    14.10 用JavaScript实现数组排序 14.11 数字千分位函数 14.12 读写Cookie的函数 14.13 获取JavaScript函数中的所有参数 14.14 奇偶数的判断 14.15 在JavaScript运行VBScript函数 14.16 购物篮中常用的计算总价效果 ...

    《程序天下:JavaScript实例自学手册》光盘源码

    14.10 用JavaScript实现数组排序 14.11 数字千分位函数 14.12 读写Cookie的函数 14.13 获取JavaScript函数中的所有参数 14.14 奇偶数的判断 14.15 在JavaScript运行VBScript函数 14.16 购物篮中常用的计算总价效果 ...

    python入门到高级全栈工程师培训 第3期 附课件代码

    08 JS的数组对象 09 JS的函数对象 第42章 01 JS的函数作用域 02 JS的window对象之定时器 03 JS的history对象和location对象 04 JS的DOM节点 05 JS的DOM节点 第43章 01 上节知识回顾 02 js之onsubmit事件与组织...

    精易官方免费模块v3.60版

    2.删除“程序_禁止重复运行_浏览器”,一个不知道何时添加的未公开子程序(可能代码也有问题) 1.完善“程序_加入右键菜单”,增加可空参数 &lt;显示名称&gt;感谢 阿蒙 的提醒 2.完善“线程_取自线程句柄”,采用百度百科的...

    JavaScript网页特效范例宝典源码

    实例064 将数组中的数据添加到下拉菜单中 107 实例065 应用下拉菜单选择所要联机的网站 108 实例066 多级级联菜单 110 实例067 可以输入文字的下拉菜单 111 实例068 根据下拉菜单的值显示不同控件 112 实例069 分级...

    PHP开发实战1200例源码

    实例129 去除数组中的重复元素 158 实例130 字符串与数组的转换 159 实例131 对数组元素进行随机排序 160 实例132 随机抽取数组中元素 161 实例133 二维数组的输出 162 实例134 获取数组当前的键名和值 162 实例135 ...

    精易模块[源码] V5.15

    2、改善“程序_禁止重复运行”添加是否显示已运行的参数,此命令由易友【@小爬虫】改进。 3、修正“网页_取网址引用”不支持Https和mms地址协议问题,感谢易友【@小爬虫】反馈。 4、修正“文件_改扩展名”当后缀名...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例129 去除数组中的重复元素 158 实例130 字符串与数组的转换 159 实例131 对数组元素进行随机排序 160 实例132 随机抽取数组中元素 161 实例133 二维数组的输出 162 实例134 获取数组当前的键名和值 162 实例135 ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例129 去除数组中的重复元素 158 实例130 字符串与数组的转换 159 实例131 对数组元素进行随机排序 160 实例132 随机抽取数组中元素 161 实例133 二维数组的输出 162 实例134 获取数组当前的键名和值 162 实例135 ...

    jquery插件使用方法大全

    可以用来添加不向外部公开的方法,或者对jQuery的某些方法进行重新定义以提供新功能,或者提供更好的封装、避免名称空间冲突。当然,也可以用来开发插件,但Resig强烈建议在开发插件之前,先考虑jQuery UI widget...

Global site tag (gtag.js) - Google Analytics