87,914
社区成员
发帖
与我相关
我的任务
分享
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;
}
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; //填充完成,返回处理后的数组。
}
var a ={}
alert(typeof(a[2]))//说明根本没有 a[2]这个属性存在,所以typeof返回undefined
var b = {}
b[2] = 3
alert(typeof(b[2]))//b[2]属性存在,而且是个数值类型 所以返回number
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;
}