`
tomoya
  • 浏览: 1826 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JavaScript数组删除重复项

阅读更多

如果你一直在乎别人的看法,你就毁了。 ——《荒蛮故事》。

看了realazy的《JavaScript 数组的uniq方法》,提供了几个删除数组条目中重复的条目的Array原型方法,我也给出我的新解:

1、Realazy的写法

Array.prototype.uniq = function() { 
    var resultArr = [], 
        returnArr = [], 
        origLen = this.length, 
        resultLen; 

    function include(arr, value) { 
        for (var i = 0, n = arr.length; i < n; ++i){ 
            if (arr[i] === value) { 
                return true; 
            } 
        } 
        return false; 
    } 

    resultArr.push(this[0]); 
    for (var i = 1; i < origLen; ++i) { 
        if (include(resultArr, this[i])) { 
            returnArr.push(this[i]); 
        } else { 
            resultArr.push(this[i]); 
        } 
    } 

    resultLen = resultArr.length; 
    this.length = resultLen; 
    for (var i = 0; i < resultLen; ++i){ 
        this[i] = resultArr[i]; 
    } 
    return returnArr; 
}

我稍作修改,避免返回的重复项数组中存在重复项,但思路不变。

Array.prototype.distinct = function(){
    var ret = [],
        resultArr = [],
        returnArr = [],
        i = 1,
        origLen = this.length,
        resultLen;

    function include(arr, value){
    for (var i=0, n=arr.length; i<n; ++i){
        if (arr[i] === value){
        return true;
        }
    }
        return false;
    }

    resultArr.push(this[0]);
    for (i; i<origLen; ++i){
        if (!include(resultArr, this[i])){
            resultArr.push(this[i]);
        } else {
            if (!include(returnArr, this[i])){
            returnArr.push(this[i]); 
            } 
        }
    }

    ret[0] = resultArr;
    ret[1] = returnArr;
    return ret;
}

2、能叔的写法

直接返回一个包含2个元素的数组,一个是删除重复项的新数组,一个是包含重复项的数组。
经测试这个方法比realazy给出的方法似乎还要快一些。

Array.prototype.distinct = function()   
{   
   var ret = [],
   resultArr = [],
   returnArr = [];
   var a = {};   
   for(var i=0; i<this.length; i++) {
    if(typeof a[this[i]] == "undefined") {
       a[this[i]] = false; //数组中只有一项
    }
    else{
       a[this[i]] = true;   //数组中有重复的项
    }
   }     
   for(var i in a) {
      resultArr[resultArr.length] = i; 
      if (a[i]) {
        returnArr[returnArr.length] = i; 
    }
   }
   ret[0] = resultArr;
   ret[1] = returnArr;
   return ret;   
}

3、其它写法

当然还有很多其它的写法,主要借助于Array原生方法:

  • 利用splice函数:

    Array.prototype.distinct_bt1 = 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;
    }
    
  • 利用sort函数:

    Array.prototype.distinct_bt2=function(){ 
       this.sort(); 
       var ret = []; 
       for(var i=this.length-1;i>-1;i--) 
       { 
        if( this[i] != ret[ ret.length - 1 ] ) 
        ret.push(this[i]); 
       } 
       return ret; 
    }
    

缺点也很明显:

  1. distinct_bt1返回的重复项数组中存在重复项,而且执行效率不高。
  2. distinct_bt2对元数组进行了排序,似乎有点画蛇添足(破坏了数组的原始排序属性),但想法不错O(∩_∩)O~

欢迎关注我的个人微信公众号:能叔

 

能叔

分享到:
评论

相关推荐

    JavaScript数组去重功能的设计与实现.pdf

    本文主要讨论了JavaScript数组去重功能的设计与实现,以解决在数据处理过程中产生大量重复数据的问题。文章首先介绍了JavaScript的基本概念,包括ECMAScript、DOM、BOM三个部分,并对JavaScript的历史发展进行了简要...

    javascript 删除数组中重复项(uniq)

    总之,JavaScript中删除数组重复项的方法多种多样,可以根据具体需求选择最合适的实现。考虑到兼容性和性能,使用`Array.indexOf()`和自定义`indexOf`方法相结合的策略是一种常见的做法。在处理复杂类型的数组时,...

    在javascript中,如果删除二维数组中重复的元素

    在JavaScript中删除二维数组中重复的元素 在JavaScript中,删除二维数组中重复的元素是一种常见的需求。二维数组是一种复杂的数据结构,它由多个一维数组组成,每个一维数组可以包含不同的元素。在实际应用中,我们...

    javascript数组去掉重复

    通过上述三种方法的介绍和比较,我们可以了解到JavaScript数组去重的基本实现思路和各自的方法优缺点。在实际的项目开发中,可以根据数组的具体情况选择合适的去重方法,以达到性能最优和代码简洁的平衡。同时,通过...

    JavaScript数组去重1

    这种方法的时间复杂度为O(logN),但由于JavaScript数组删除元素的时间复杂度较高,因此在大数据量时效率不高。 3. **利用Object/Map/Set去重法**: JavaScript的`Object`、`Map`和`Set`数据结构都具有键唯一性的...

    JavaScript移除数组内重复元素的方法

    上述提供的示例代码采用了一种通过对象属性检测的方法来移除数组中的重复项。 首先,我们来理解一下提供的示例代码中的`removeDuplicates`函数。这个函数的工作原理是通过创建一个空对象`temp`作为临时存储结构,...

    JavaScript合并两个数组并去除重复项的方法

    在JavaScript中,合并两个数组并去除重复项是一个常见的任务,特别是在处理数据集合或者组合不同来源的数据时。这里我们将深入探讨几种不同的方法来实现这个功能。 首先,我们可以使用`concat()`方法来合并两个数组...

    JavaScript几种数组去掉重复值的方法推举_.docx

    这个方法也使用两层循环,但当找到重复元素时,它不会删除元素,而是跳过后续的循环,将不重复的元素添加到新数组中。这种方法避免了对原数组的操作,但同样需要两次遍历。 3. **连续循环**(ov3): 这个方法在内...

    JS查找数组中重复元素的方法详解

    此外,本文还提到了一些扩展阅读资源,包括《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结...

    JS简单去除数组中重复项的方法

    在JavaScript编程中,处理数组是常见的任务之一,其中包括去除数组中的重复元素。本文将深入探讨如何使用简单的JS方法实现这一功能。我们通过一个名为`unique`的函数来演示这一过程,该函数接受一个包含重复元素的...

    JavaScript基于对象去除数组重复项的方法

    除了去重,还可以探索更多JavaScript数组操作(如`map`, `filter`, `reduce`等)、遍历算法、数学运算、数据结构、查找算法、切换特效、动画特效以及错误调试等方面的技巧,不断拓展自己的JavaScript知识体系。

    JavaScript实现删除数组重复元素的5种常用高效算法总结

    本文实例讲述了JavaScript实现删除数组重复元素的5种常用高效算法。分享给大家供大家参考,具体如下: 这里就 js 如何实现数组去重整理出5种方法,并附上演示Demo 以及 源码。 1.遍历数组法 最简单的去重方法, 实现...

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

    这种方法通过双重循环实现,外层循环遍历数组元素,内层循环从当前元素的下一个开始,如果发现相同值,则使用`splice()`方法删除重复项。这种方法简单直接,但效率较低,因为每次删除元素后,数组长度会减小,需要...

    javascript中数组删除指定的元素的代码示例

    总结来说,JavaScript中数组删除元素可以使用splice方法直接在原数组上操作删除特定元素,或者使用filter方法创建一个不包含特定元素的新数组。在小程序开发中,这两种方法可以结合页面数据和事件处理机制,实现用户...

    javascript过滤数组重复元素的实现方法

    javascript过滤数组重复元素的实现方法  以下是在网上找的资料,直接在项目中可以使用,大家可以参考下: 实现代码: function filterArray(receiveArray){ var arrResult = new Array(); //定义一个返回结果数组....

    JS实现合并两个数组并去除重复项只留一个的方法

    在JavaScript中,合并两个数组并去除重复项是一个常见的需求,尤其是在处理用户输入、数据整合或者数据处理时。本文将详细阐述如何使用JavaScript来实现这一功能,并介绍相关的数组处理技巧。 首先,要合并两个数组...

Global site tag (gtag.js) - Google Analytics