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

例1

利用双重复制来一个个判断然后删除

 代码如下 复制代码

<script type="text/javascript">
<!--
    Array.prototype.distinct = function() {
        var ret = [];
        for (var i = 0; i < this.length; i++) {
         for (var j = i+1; j < this.length;) {
             if (this[i] === this[j]) {
                 ret.push(this.splice(j, 1)[0]);
             } else {
                 j++;
             }
         }
        }
        return ret;
    }
    var haha=[1,"6",2,3,4,5,6,7,7,6,6,6];
    alert(haha.distinct()+"|"+haha);
-->
</script>

但是这个函数中使用了2个for循环,当数组数据多的情况下,效率肯定不行,下面我百度找到一个可以去除一个循环的办法

 代码如下 复制代码

<script type="text/javascript">
<!--
    Array.prototype.distinct=function(){
        var tempobj={},temparr=[];
        for(var i=0,items;(items=this[i])!=null;)
        {
            if(tempobj[items]!==items)
            {
                tempobj[items]=items;
                i++;
            }
            else
            {
                temparr.push(this.splice(i,1)[0]);
            }
        }
        return temparr;
    }
    var haha=[1,"6",2,3,4,5,6,7,7,6,6,6];
    alert(haha.distinct()+"|"+haha);
-->
</script>

可以看出结果是一样的,但是少了一个for循环,多了一个临时对象tempobj,效率肯定是大大提升了。原理就是把数组的值存入tempobj的属性及属性值,如果tempobj的属性值等于数组的值,就把该值从数组中删除并添加到temparr中。

最推荐的一种方法

 代码如下 复制代码

function getnorepeat() {
return arguments[0].join('‖').match(/(b[^‖]+b)(?!.*‖1b)/ig);
}
var tmparr = [1, 'a', 'ab', 'abc', 'd', 1.2, 'a+b', 'd', 'e', 5, 'www.111cn.net', 1, 'h', 'c', 'ab'];
var retarr = getnorepeat(tmparr);
alert(retarr);

时间: 2024-10-27 15:46:10

js去除数组中的重复项几种方法的相关文章

js 巧妙去除数组中的重复项_javascript技巧

时不时的看下YUI的源码, 总会有些收获. 一. YUI中的源码' 复制代码 代码如下: var toObject = function(a) { var o = {}; for (var i=0, j=a.length; i<j; i=i+1) { // 这里我调整了下, YUI源码中是i<a.length o[a[i]] = true; } return o; }; var keys = function(o) { var a=[], i; for (i in o) { if (o.has

js删除Array数组中指定元素的两种方法_javascript技巧

本节内容: js删除Array数组中指定元素 方法一, /* * 方法:Array.remove(dx) 通过遍历,重构数组 * 功能:删除数组元素. * 参数:dx删除元素的下标. */ Array.prototype.remove=function(dx) { if(isNaN(dx)||dx>this.length){return false;} for(var i=0,n=0;i<this.length;i++) { if(this[i]!=this[dx]) { this[n++]=

PHP删除数组中特定元素的两种方法

这篇文章介绍了PHP中删除数组中特定元素的两种方法,有需要的朋友可以参考一下   方法一: 复制代码 代码如下: <?php $arr1 = array(1,3, 5,7,8); $key = array_search(3, $arr1); if ($key !== false)     array_splice($arr1, $key, 1); var_dump($arr1); ?> 输出: array(4) { [0]=> int(1) [1]=> int(5) [2]=>

JavaScript中去掉数组中的重复值的实现方法_javascript技巧

复制代码 代码如下: 题目:要求写一个函数,去掉给定数组中的重复值. 如: 传入数组 a = [0, 8, 5, 4, 78, 8, 90, 4, 'a', 'b', 'a']; 要求返回:[0,4,5,8,78,90,a,b] 对于这个题目,在面试之后也想了好多次,不过一直没能想出一个时间复杂度较低的方法.昨天下午在宿舍看<JavaScript语言精粹>看到一个书中的一段代码有所触发,于是在jsfiddle上测试了,成功.代码如下(完整版参见jsfiddle) 复制代码 代码如下: var

如何高效率去掉js数组中的重复项_javascript技巧

方式一: 常规模式 1.构建一个新的临时数组存放结果 2.for循环中每次从原数组中取出一个元素,用这个元素循环与临时数组对比 3.若临时数组中没有该元素,则存到临时数组中 方式二: 使用了默认Js数组sort默认排序,是按ASCII进行排序: 若要按照升降序的排列如下:<控制台打印输出> 1.先将当前数组进行排序 2.检查当前中的第i个元素 与 临时数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置 3.如果不相同,则将该元素存入结果数组中 方式三: <推荐>利

如何用IEnumerable接口去除数组里面的重复项

问题描述 有个数组,我调用了Distinct方法返回序列中非重复的元素,但是没有用,请问下是不是要实现IEnumerable接口才能清除数组里面的重复项?(最好举例说明下如何实现这个接口) 解决方案 解决方案二:该回复于2010-05-14 07:59:53被版主删除解决方案三:友情帮顶下!顺便学习学习!解决方案四:IEnumerable<String>distinctList=numberList.Distinct();

PHP从数组中删除元素的四种方法实例

茴香豆的"茴"字有四种写法,PHP从数组中删除元素也有四种方法 ^_^. 删除一个元素,且保持原有索引不变 使用 unset 函数,示例如下: <?php $array = array(0 => "a", 1 => "b", 2 => "c"); unset($array[1]); //↑ 你想删除的key ?> 输出: Array (     [0] => a     [2] =>

js在数组中删除重复的元素自保留一个(两种实现思路)_javascript技巧

例如:var student = ['qiang','ming','tao','li','liang','you','qiang','tao']; 第一种思路是:遍历要删除的数组arr, 把元素分别放入另一个数组tmp中,在判断该元素在arr中不存在才允许放入tmp中 用到两个函数:for ...in 和 indexOf() <script type="text/javascript"> var student = ['qiang','ming','tao','li','l

JS获取网页中HTML元素的几种方法分析

js|网页 getElementById getElementsByName getElementsByTagName 大概介绍 getElementById ,getElementsByName ,getElementsByTagName 后两个是得到集合,byid只是得到单个对象 getElementById 的用法 举个例子: <a id="link1" name="link1" href=http://www.webjx.com>网页教学网<