zoukankan      html  css  js  c++  java
  • 字符串去重的再研究

    1、前言
          今天参加了 某公司的在线笔试,其实题目很简单,一道是关于数组去重,另外一道就是字符串替换的问题。这些问题都是网上很常见的问题,但是答的并不是很理想,如果打分的话只能得到70分,面试官也说我的编程水平中等,这样的评价我是完全认同的。现在就回过头来用多种办法求解这两道题吧。
    2、数组去重
    方法1:使用hash的方法解决该问题
    2.1.1 初次写出的代码
    Array.prototype.unique = function(){
      var arr = this, obj = {}, result ,i, len = arr.length;
      for(i=0 ; i<len; i++){
           if(!obj[arr[i]]){
               obj[arr[i]] = true;
          result.push(arr[i]);
           }
        }
        return result;
    }
    

     这是我第一次写的代码,咋一看没什么问题,但是请看下面这个例子

    var a = ['a','b','a','c',3,5,8,3,'8']
    a.unique()  //  ['a','b','c',3,5,8]
    

    但是我们期望的结果是什么呢?自然是['a','b','c',3,5,8,'8'],至于什么原因大家都明白。下面是当时我写的很2的方法: 

    2.1.2 第一次修bug
    Array.prototype.unique=  function(){
         var arr = this, obj1 = {}, obj2 = {}, result = [], i , len = arr.length;
         for(i=0; i< len; i++){
             if(typeof arr[i] === 'number'){ 
                  if(!obj1[arr[i]]){ 
               obj1[arr[1]] = true;
                     result.push(arr[i]);
                  }
              }else{
                  if(!obj2[arr[i]]){
                      obj2[arr[i]] = true;
                      result.push(arr[i]); 
                  } 
              }
           }
           return  result;
    } 
    var a = ['a','b','a','c',3,5,8,3,'8']
    var b = a.unique(); //['a','b','c',3,5,8,'8']
    

    IQ太低,上面的代码太土,太2,现在想想看还有没有其他办法。

    2.1.3 第二次修bug
    Array.prototype.unique=  function(){
    	var arr = this, obj = {}, result = [], i , len = arr.length;
    	for(i=0; i< len; i++){
    	 if(obj[arr[i]] !== arr[i] ){
    	      obj[arr[i]] = arr[i];
    	      result.push(arr[i]); 
    	 }
    	}
    	return result;
    }
    var a = ['a','b','a','c',3,5,8,3,'8'];
    var b = a.unique();  // ['a','b','c',3,5,8,'8']
    

    接下来问题来了,假如存在这样的数组 var a = ['a','b','a','c',3,5,8,3,'8',8];你妈这又出现问题了,结果为['a','b','c',3,5,8,'8',8],那就都存起来:

    2.1.4 第三次修bug
    if(!Array.prototype.indexOf){
    	Array.prototype.indexOf = function(ele,index){
    		var arr = this, len = arr.length, index = index >= 0 ? index : index + len ,i;
    		for(i=index; i < len; i++){
    		    if(arr[i] === ele){
    		      return i;
    		    }
    		}
    		return -1;
    	}
    }
    
    Array.prototype.unique=  function(){
    	var arr = this, obj = {}, result = [], i , len = arr.length;
    	for(i=0; i< len; i++){
    		obj[arr[i]] = obj[arr[i]] || [];
    	 	if(obj[arr[i]].indexOf(arr[i]) === -1 ){
    	           obj[arr[i]].push(arr[i]);
    	           result.push(arr[i]); 
    	 	}
    	}
    	return result;
    }
    var a =  ['a','b','a','c',3,5,8,3,'8',8];
    var b = a.unique(); // ['a','b','c',3,5,8,'8'] 到目前为止应该不会出现bug了
    
    方法2:使用indexOf方法或者lastIndexOf方法
         这个方法需要考虑到低版本的浏览器是不知道indexOf属性的,所以使用前非常有必要写下兼容性的代码:
    if(!Array.prototype.indexOf){
    	Array.prototype.indexOf = function(ele,index){
    		var arr = this, len = arr.length, index = index >= 0 ? index : index + len ,i;
    		for(i=index; i < len; i++){
    		    if(arr[i] === ele){
    		      return i;
    		    }
    		}
    		return -1;
    	}
    }
    Array.prototype.unique=  function(){
    	var arr = this, obj = {}, result = [], i , len = arr.length , n;
    	for(i=0; i< len; i++){
    		n = arr.indexOf(arr[i],i+1);
    		if( n !== -1){
    			arr.splice(n,1);
    		}
    	}
    	return arr;
    }
    var a =  ['a','b','a','c',3,5,8,3,'8',8];
    var b = a.unique();  //['a','b','c',3,5,8,'8']
    现在想出来的也就这两种方法了。 
  • 相关阅读:
    CefSharp-基于C#的客户端开发框架技术栈开发全记录
    C#中HttpWebRequest、WebClient、HttpClient的使用详解
    蜘蛛侠网站-关注C#爬虫技术
    网络剪刀-NetCut
    JSON.stringify 格式化输出字符串
    Vue 3.0 provide 传值到子组件
    全局添加可执行的node脚本
    npm link
    低代码平台思路
    java jwt使用,springboot 整合java-jwt,java jwt工具类
  • 原文地址:https://www.cnblogs.com/shamoguying1140/p/3346423.html
Copyright © 2011-2022 走看看