首页 > js数组去重复方法,求解

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;
}

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

Set会给array去重


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

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

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

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

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

【热门文章】
【热门文章】