下面这个函数是去除数组重复元素的,但中间一步 a={} 我怎么都没搞懂是咋回事,高手看看function unique(data){ 
data = data || []; 
var a = {}; //这是啥意思
len = data.length; 
for (var i=0; i<len;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; 
}

解决方案 »

  1.   

    var a = {}; 声明,并初始化一个变量。{} 表示 object 对象
    [] 表示数组。json 语法
      

  2.   

    var a = {}; 代表创建一个空对象
      

  3.   

    既然是空对象 那为什么有时候 typeof(a[v]) 有东西呢
      

  4.   

    function unique(data){ 
        data = data || []; 
        var a = {}; //相当于 var a  = new Object 
        len = data.length; 
        for (var i=0; i<len;i++){ 
            var v = data[i];
            if (typeof(a[v]) == 'undefined'){//还有这里
                a[v] = 1; 
            } 
    /*
    比如说 data数组为 [1,1,1,2,3,4]
    上面这段会使a对象变成 
    a[1] = 1 
    a[2] = 1
    a[3] = 1 
    a[4] = 1
    */
        }
        data.length=0; 
        for (var i in a){ 
            data[data.length] = i; //这里的i就是a对象中的属性名,将这些属性名赋给data数组
        } 
        return data; 
    }
      

  5.   

    还是有一点不明白,为什么typeof(a[v])有时候是undefined,有时候是number呢
      

  6.   

    var a ={}
    alert(typeof(a[2]))//说明根本没有 a[2]这个属性存在,所以typeof返回undefinedvar b = {}
    b[2] = 3
    alert(typeof(b[2]))//b[2]属性存在,而且是个数值类型 所以返回number
      

  7.   

    理解一下 undefined 类型 意思是 定义了没有值
      

  8.   


    代码没仔细看完 但大略可能就是我说的意思
    1: a={} 什么意思
    js访问数组只能用索引 (即0,1,2...)
    给他转换成json 就可以通过‘值’来访问例:var a = [0,1,2,3]
    var o = {
       0:0,
       1:1,
       2:2,
       3:3
    }
    alert(o[1])
    这样就可以用过循环来比较
      

  9.   


    没赋值typeof就返回undefined 赋值之后就会有类型
      

  10.   

    早上过来,又捣腾了一会,结合诸位的回帖提示,终于看明白了,下面贴出我的理解,请各位赐教function unique(data){ 
    data = data || []; //处理参数,当传入参数为某些类似undefined的值时,转换为空数组
    var a = {}; //预置一个空对象
    len = data.length;

    for (var i=0; i<len;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;  //填充完成,返回处理后的数组。
    }