当前位置:编程学习 > 网站相关 >>

字符串去重的再研究

1、前言
      今天参加了 某公司的在线笔试,其实题目很简单,一道是关于数组去重,另外一道就是字符串替换的问题。这些问题都是网上很常见的问题,但是答的并不是很理想,如果打分的话只能得到70分,面试官也说我的编程水平中等,这样的评价我是完全认同的。现在就回过头来用多种办法求解这两道题吧。
2、数组去重
方法1:使用hash的方法解决该问题
<span style="font-size: 14px;"><strong>2.1.1 初次写出的代码</strong>
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;
}
</span>
 这是我第一次写的代码,咋一看没什么问题,但是请看下面这个例子
 
<span style="font-size: 14px;">var a = ['a','b','a','c',3,5,8,3,'8']
a.unique()  //  ['a','b','c',3,5,8]
</span>
但是我们期望的结果是什么呢?自然是['a','b','c',3,5,8,'8'],至于什么原因大家都明白。下面是当时我写的很2的方法: 
 
<span style="font-size: 14px;"><strong>2.1.2 第一次修bug</strong>
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']
</span>
 
 
IQ太低,上面的代码太土,太2,现在想想看还有没有其他办法。
 
<span style="font-size: 14px;"><strong>2.1.3 第二次修bug</strong>
Array.prototype.unique=  function(){
    var arr = this, obj = {}, result = [], i , len = arr.length;
    for(i=0; i< len; i++){
     if(<span style="color: #ff6600;">obj[arr[i]] !== arr[i]</span> ){
          <span style="color: #ff6600;">obj[arr[i]] = arr[i]</span>;
          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']
</span>
 
 
接下来问题来了,假如存在这样的数组 var a = ['a','b','a','c',3,5,8,3,'8',8];你妈这又出现问题了,结果为['a','b','c',3,5,8,'8',8],那就都存起来:
 
<span style="font-size: 14px;"><strong>2.1.4 第三次修bug</strong>
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 ){
              <span style="color: #ff6600;"> obj[arr[i]].push(arr[i])</span>;
               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了
</span>
方法2:使用indexOf方法或者lastIndexOf方法
     这个方法需要考虑到低版本的浏览器是不知道indexOf属性的,所以使用前非常有必要写下兼容性的代码:
<span style="font-size: 14px;">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 = <span style="color: #ff6600;">arr.indexOf(arr[i],i+1)</span>;
        if( n !== -1){
            <span style="color: #ff6600;">arr.splice(n,1)</span>;
        }
    }
    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']</span>
补充:综合编程 , 其他综合 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,