js数组去重复方法,求解

这是一个通过对象的键值对来取这个数组重复元素的方法,下边注释部分不理解,求帮忙解答下

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;
}
阅读 2.9k
2 个回答

因为 JS 的键是不分类型的,例如下面这段代码:

n = {};
n[1] = 1;
n["1"] = 1;

执行后 n 只有一个元素,如果要区分数字和字符串,就要保存类型。

例如当 array = [1, "1"],问题中的代码执行后 n = {1: ["number", "string"]}

当遍历到一个新值 val,问题中的代码会检查 val 是否在 n 的键中,然后检查 val 的类型是否在 val 键对应的值中,两种皆否则认定这是一个非重复的值。

console.log(new Set(['a','b','c','a']));

Set会给array去重

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题