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

2019-03-05  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读