Rumah  >  Artikel  >  hujung hadapan web  >  JavaScript中如何实现数组去重?js中数组去重的三种方法(代码实例)

JavaScript中如何实现数组去重?js中数组去重的三种方法(代码实例)

青灯夜游
青灯夜游asal
2018-10-15 13:37:303881semak imbas

JavaScript中如何实现数组去重?本篇文章就给大家介绍在js中数组去重的三种常用方法。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。

下面我们就通过简单代码示例来介绍js中数组去重的三种常用方法

第一种方法:for循环(两次) + 新数组

思路:

1.构建一个新的数组存放结果

2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比

3.若结果数组中没有该元素,则存到结果数组中

//方法一
var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
function removeDuplicatedItem(arr) {
   for(var i = 0; i < arr.length-1; i++){
       for(var j = i+1; j < arr.length; j++){
           if(arr[i]==arr[j]){
              arr.splice(j,1);//console.log(arr[j]);
              j--;
           }
       }
   }
   return arr;
}

arr2 = removeDuplicatedItem(arr);
console.log(arr);
console.log(arr2);

第一种方法就可以基本满足我们的需求了,对arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5]这样的简单数组只要使用类型比较就可以了,但如果数组很长呢?如此遍历数组,数组长度为n,那么时间复杂度为n*n。显然第一种方法的性能还有待提升。接下来是第二种方法,用到数组排序,在排序的过程去除重复的值。

第二种方法:for循环(一次) + sort()排序 + 新数组

原数组长度不变但被按字符串顺序排序,借助新数组 ,判断新数组中是否存在该元素如果不存在则将此元素添加到新数组中

//方法二
var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
function removeRepEle(ar) {
    var ret = [],
        end;//临时变量用于对比重复元素
    ar.sort();//将数重新组排序
    end = ar[0];
    ret.push(ar[0]);
    for (var i = 1; i < ar.length; i++) {
        if (ar[i] != end) {//当前元素如果和临时元素不等则将此元素添加到新数组中
            ret.push(ar[i]);
            end = ar[i];
        }
    }
    return ret;
}

arr2 = removeRepEle(arr);
console.log(arr);//[ 1, 1, 1, 1, 23, 23, 3, 5, 5, 6, 7, 8, 9, 9 ]
console.log(arr2);//[ 1, 23, 3, 5, 6, 7, 8, 9 ]

第二种方法有一定的局限性,因为数组是先进行排序,然后再去重的,所以最后返回的结果是js数组去重并排序后的结果。如果要求不改变数组的顺序去重,那这种方法就不可取了。

第三种方法(推荐):for循环(一次) + 新数组 + 新对象

利用空对象来记录新数组中已经存储过的元素

//方法三 
var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
var o={};
var new_arr=[];
for(var i=0;i<arr.length;i++){
    var k=arr[i];
    if(!o[k]){
        o[k]=true;
        new_arr.push(k);
    }
}
console.log(new_arr);

总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。更多相关教程请访问JavaScript视频教程jQuery视频教程bootstrap教程

Atas ialah kandungan terperinci JavaScript中如何实现数组去重?js中数组去重的三种方法(代码实例). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn