function unique(data){
    data = data || [];
    var a = {};
    for (var i=0; i<data.length; i++) {
        var v = data[i];
        if (typeof(a[v]) == 'undefined'){
            a[v] = 1;
        }
    };
    data.length=0; 
    for (var i in a){
        data[data.length] = i;
    }
    return data;
}var arr = [9,1,3,8,7,7,6,6,5,7,8,8,7,4,3,1];
alert(unique(arr));
我在网上看到了这段代码,可是看不懂
哪位高手给解释一下行吗?跪求了

解决方案 »

  1.   

    这个貌似多做了无用功!参考:<script type="text/javascript">
    function unique(data){
        if(!data||!data.length){return;}
        var l = data.length,a = {},v = null;
        for(var i=0;i<l;i++){/*遍历数组*/
            v = data[i];/*取当前数值*/
            if (v in a){/*如果该数值在hash表a中存在则移除*/
                data.splice(i,1);
                i--,l--;
                continue;
            }
            a[v] = 1;/*否则将该值加入到hash表a*/
        };
        a = null;
        return data;
    }var arr = [9,1,3,8,7,7,6,6,5,7,8,8,7,4,3,1];
    alert(unique(arr)); 
    </script>
      

  2.   

    简化了一下。function unique(data){ 
        data = data || []; 
        var a = {}; //声明一个对象,JavaScript中的对象可以当哈希表用
        for (var i=0; i <data.length; i++) {
            a[data[i]] = true;  //设置标记,把数组的值当下标,这样就可以去掉重复的值
        }; 
        data.length=0; 
        for (var i in a){ //遍历对象,把已标记的还原成数组
            data[data.length] = i; 
        } 
        return data; 

    var arr = [9,1,3,8,7,7,6,6,5,7,8,8,7,4,3,1]; 
    alert(unique(arr));
    不知道有没说清楚?
      

  3.   

    function unique(data){
        if (!data instanceof Array) return;
        var h = {}, v;
        for (var i = data.length - 1; i >= 0; i--) {
            var v = data[i];
            if (h[v]) data.splice(i,1);
            else h[v] = true;
        }
        h = null;
        return data;
    }混点分,倒序遍历就不用i--了。
    一会测试一下性能。
      

  4.   

    <script>
    var arr = [9,1,3,8,7,7,6,6,5,7,8,8,7,4,3,1];
    arr = arr.sort().join("").replace(/([\d])\1*/g,"$1").split("");
    alert(arr);
    </script>
      

  5.   


    // 楼上的几位貌似都没考虑 弱性判断
    <script type="text/javascript">
    var inArray = function(arr, elt) {
    for(var i = 0, len = arr.length; i < len; i++) {
    if(arr[i] === elt) {
    return true;
    }
    }
    return false;
    };
    var unique = function(arr) {
    if(arr.length < 2) return arr;
    var i = 0, len = arr.length; re = [];
    for(; i < len; i++) {
    if(!this.inArray(re, arr[i])) {
    re.push(arr[i]);
    }
    }
    return re;
    };
    var arr = [9,1,'3',8,7,7,6,6,5,7,8,8,7,4,3,1]; // 这里的3 和 '3' 类型是不一致的,.,
    alert(unique(arr));</script>
      

  6.   


    // 我认为 还是用inArray判断比较安全
    //如果不需要考虑类型的问题 我也在给出一款<script type="text/javascript">
    var uniq = function (arr) {    
    var a = [],        
    o = {},        
    i,        
    v,        
    len = arr.length;    
    if (len < 2) {        
    return arr;    
    }    
    for (i = 0; i < len; i++) {        
    v = arr[i];        
    if (o[v] !== 1) {            
    a.push(v);            
    o[v] = 1;       
    }    
    }    
    return a;
    }
    var arr = [9,1,'3',8,7,7,6,6,5,7,8,8,7,4,3,1]; 
    alert(uniq(arr));</script>
      

  7.   

    JQuery 的实现:    -- 以下是jquery的实现,可以参考参考---
    unique: function( array ) {
    var ret = [], done = {}; try { for ( var i = 0, length = array.length; i < length; i++ ) {
    var id = jQuery.data( array[ i ] ); if ( !done[ id ] ) {
    done[ id ] = true;
    ret.push( array[ i ] );
    }
    } } catch( e ) {
    ret = array;
    } return ret;
    }