下面这个函数是去除数组重复元素的,但中间一步 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;
}
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;
}
[] 表示数组。json 语法
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;
}
alert(typeof(a[2]))//说明根本没有 a[2]这个属性存在,所以typeof返回undefinedvar b = {}
b[2] = 3
alert(typeof(b[2]))//b[2]属性存在,而且是个数值类型 所以返回number
代码没仔细看完 但大略可能就是我说的意思
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])
这样就可以用过循环来比较
没赋值typeof就返回undefined 赋值之后就会有类型
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; //填充完成,返回处理后的数组。
}