• web前端面试系列


    1. 思路:设置一个临时数组temp,然后遍历要去重的数组arr,如果arr中的元素能够在temp中找到,则跳过此元素,否则将此元素存入temp,最后返回temp。

    实现一

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

    实现二

     1 function unique( arr ) {
     2     var temp = [];
     3     var len = arr.length;
     4     for (var i = 0; i < len; i++) {
     5         var isRepeated = false;
     6         for ( var j = 0; j < temp.length; j++){
     7                 if ( arr[i] === temp[j] ){                    
    isRepeated = true;
    break;
    }
    9 } 10 if ( !isRepeated ) temp.push( arr[i] ); 11 } 12 return temp; 13 }

    2. 思路:设置一个临时数组temp,然后遍历要去重的数组arr,如果arr[i]中的元素在arr中出现的第一次的位置也为i,则将其存入temp,否则跳过此元素,最后返回temp。

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

    3. 思路:设置一个临时对象tempObj,然后遍历要去重的数组arr, 如果arr[i]中的元素在此对象中有标记,则跳过,否则在临时对象中进行标记,并将其存入临时数组tempArr, 最后返回tempArr。

     1 function unique(arr){
     2     var tempObj = {};
     3     var tempArr = [];
     4     var len = arr.length;
     5     for (var i = 0; i < len; i++) {
     6         if ( !tempObj[arr[i]] ){
     7             tempObj[arr[i]] = true;
     8             tempArr.push(arr[i]);
     9         }
    10     }
    11     return tempArr;
    12 }

    4. 思路:对要去重的数组 arr 先进行排序,这样重复的元素就排在了相邻的位置,然后对数组 arr 进行遍历,将arr[i] 与 临时数组 temp 中的最后一个元素进行比较,如果不同则将其存入临时数组,如果相同则跳过此元素,最后返回临时数组。

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

     写在最后:其实在真实的项目中,我们没有必要自己去实现这样的函数,利用underscore.js 或者lodash 这样的函数库提供的方法是更好的选择。

  • 相关阅读:
    server2012/win8 卸载.net framework 4.5后 无法进入系统桌面故障解决【转】
    Entity Framework中AutoDetectChangesEnabled為false時更新DB方法
    git常用命令备忘录
    MSSQL日誌傳輸熱備份注意事項
    c#生成唯一编号方法记录,可用数据库主键 唯一+有序
    Angular 隨記
    使用dumpbin命令查看dll导出函数及重定向输出到文件【轉】
    UML类图与类的关系详解【转】
    知識隨記
    session不会过期
  • 原文地址:https://www.cnblogs.com/xiaodi-js/p/5925842.html
Copyright © 2020-2023  润新知