这是一个通过对象的键值对来取这个数组重复元素的方法,下边注释部分不理解,求帮忙解答下
function unique2(array){
var n = {}, r = [], len = array.length, val, type;
for (var i = 0; i < array.length; i++) {
val = array[i];
type = typeof val; //这里不是判断val类型吗?取到的值不都应该是number这种吗
if (!n[val]) {
n[val] = [type]; //这里为什么要将数据类型number这种赋给n[val]呢,那对象n内不就都是一些,number,string这种东西了吗?
r.push(val);
} else if (n[val].indexOf(type) < 0) {
n[val].push(type);
r.push(val);
}
}
return r;
}
因为 JS 的键是不分类型的,例如下面这段代码:
执行后
n
只有一个元素,如果要区分数字和字符串,就要保存类型。例如当
array = [1, "1"]
,问题中的代码执行后n = {1: ["number", "string"]}
。当遍历到一个新值
val
,问题中的代码会检查val
是否在n
的键中,然后检查val
的类型是否在val
键对应的值中,两种皆否则认定这是一个非重复的值。