• 算法:数组去重


    1、实现目标:数组去重

    2、实现思路:

    (1)创建新数组。

    (2)遍历原数组,判断当前被遍历元素是否存在于新数组,如果存在于新数组,则判断当前被遍历元素是重复的;如果不存在于新数组,则判断当前被遍历元素不是重复的,则将其压入新数组。

    (3)遍历完毕原数组后,返回新数组。

    3、具体实现:根据对当前元素是否重复的判断方法不同,有四种不同的具体实现。

    (1)利用hash表保存被遍历元素是否重复的状态。

     1 function unique( arr ) {
     2   var n = {}, //hash表,用于判断元素是否已经压入新数组
     3       r = []; 
     4   for (var i = 0, length = arr.length; i < length; i++) {
     5     // 如果当前元素已经被压入新数组,hash表中的值则为true,据此判断其是否重复
     6     if ( !n[ arr[i] ] ) {
     7       n[ arr[i] ] = true;
     8       r.push( arr[i] );
     9     };
    10   };
    11   return r;
    12 };

    (2)利用indexOf方法,判断当前被遍历元素是否在新数组中。

    1 function unique( arr ) {
    2   var n = [];
    3   for (var i = 0, length = arr.length; i < length; i++) {
    4     if ( n.indexOf( arr[i] ) === -1 ) {
    5       n.push( arr[i] );
    6     };
    7   }
    8   return n;
    9 };

    (3)利用当前被遍历元素在原数组第一次出现的位置与其索引是否相等判断是否重复。

     1 function unique( arr ) {
     2   var n = [];
     3   for (var i = 0, length = arr.length; i < length; i++) {
     4     //如果当前数组的第i项在当前数组中第一次出现的位置不是i,那么表示第i项是重复的,忽略掉。否则存入新数组
     5     if ( arr.indexOf( arr[i] ) === i ) {
     6       n.push( arr[i] );
     7     };
     8   };
     9   return n;
    10 };

    (4)利用数组的排序方法,先排序,利用排序后的数组特性,亦即相同值的元素相邻,来判断是否重复。

     1 function unique( arr ) {
     2   arr.sort();
     3   var r = [];
     4   for (var i = 1, length = arr.length; i < length; i++) {
     5     if ( arr[i] !== arr[i - 1] ) {
     6       r.push( arr[i] );
     7     };
     8   };
     9   return r;
    10 };

    4、小结:

    (1)基于数组位置:

    第二种,从当前元素是否出现在新数组中判断是否重复;

    第三种,根据当前元素第一次出现的位置和当前被遍历元素下标是否相等判断是否重复;

    (2)基于数组分布:

    第一种,建hash表,保存数组元素的分布状态,遍历数组时,根据分布状态判断是否重复;

    (3)基于数组排序:

    第四种,先对数组排序,利用排序后,相同值数组元素相邻的特性,判断元素是否重复。

  • 相关阅读:
    jQuery自定义插件
    jQuery基础入门学习
    jQuery事件机制
    css实现块级元素的水平居中的2种常用方法
    文本编辑的css常用属性
    js的事件的绑定
    js正则表达式(常用)
    汇编初入门debug实操
    JAVA新手笔记 Intent对象和Bundle对象
    OS X运行AFNI的AlphaSim提示libgomp.1.dylib找不到的解决办法
  • 原文地址:https://www.cnblogs.com/niconicohang/p/6535044.html
Copyright © 2020-2023  润新知