美文网首页
数组去重、统计重复次数、去除字符串中的重复字符

数组去重、统计重复次数、去除字符串中的重复字符

作者: 折木丶青梵 | 来源:发表于2019-03-05 16:53 被阅读0次

    数组去重

    利用set数据结构成员唯一方法
    const unique = (array) => [...new Set(array)]
    const unique2 = (array) => {
        return Array.from(new Set(array))
    }
    

     

    统计重复次数

    let arr = [1, 1, 2, 4, 5, 5, 5, 5, 7, 5, 7, 6, 7, 7,  10]
    const fun = (arr) => {
         // 先将数组转化为Set的数据类型,然后再转回Array类型
         let dedupeArr = [...new Set(arr)]
         
         let count = 0
         let obj = {}
         dedupeArr.forEach(i => {
             count = 0
             arr.forEach(j => {
                 if (i === j) {
                     count++
                  }
              })
             obj[i] = count    // obj键名为i(对应的数组元素),值为count(出现次数)
         })
        return obj
    }
    

     

    去除字符串中的重复字符

    const fun = (str) => [...new Set(str)].join('')
    

     

    主要知识点

    1、Set本身是一个构造函数,用来生成Set数据结构。
    2、扩展运算符(...)内部使用for... of循环,所以也可以用于Set结构。

    扩展:

    Set实例的属性和方法

    属性:

    Set.prototype.constructor:构造函数,默认就是Set函数。
    Set.prototype.size:返回Set实例的成员总数。

    方法:

    1、 操作方法

    add(value):添加某个值,返回Set结构本身。
    delete(value):删除某个值,返回一个布尔值表示是否删除成功。
    has(value):判断某个值是否为Set的成员,返回一个布尔值。
    clear():清除所有成员,没有返回值

    2、遍历方法

    keys():返回键名的遍历器。
    value():返回键值的遍历器。
    entries():返回键值对的遍历器。
    forEach():使用回调函数遍历每个成员。

    使用:
    由于Set结构没有键名,只有键值(或者说键名和键值是同一个值),所以key方法和value方法的行为完全一致。
    for (let i of set.keys()) {
    // set.values(),set.entries()同理,只是entries返回的是键值相同的键值对
    console.log(i)
    }

    特别说明:
    Set的遍历顺序就是插入顺序。这个特性可以保证Set保存一个回调函数列表,调用> 时就是按照添加的顺序调用。
     

    扩展2:
    WeakSet

    WeakSet结构与Set类似,也是不重复的值的集合。但是,它与Set有两个区别。
    首先,WeakSet的成员只能是对象,而不能是其他类型的值。
    其次,WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于WeakSet之中。这个特点意味着,无法引用WeakSet的成员,因此WeakSet是不可遍历的。
    因此WeakSet只有3个方法:add, delete, has

    相关文章

      网友评论

          本文标题:数组去重、统计重复次数、去除字符串中的重复字符

          本文链接:https://www.haomeiwen.com/subject/jkyouqtx.html