JS 利用集合set实现 数组去重 交集 并集 差集

JavaScript049

JS 利用集合set实现 数组去重 交集 并集 差集,第1张

es6新的数据结构set集合 类似数组 但是成员值 都是唯一 他们之间也可以相互转换

去重

交集

has是set集合的方法

Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。

差集

并集

const nums = [1,2,3,4,3,2,1]

uniq1 = [...new Set(nums)]

uniq2 = Array.from(new Set(nums))

定义:新数据结构Set,类似于数组,但成员值不重复

使用: new Set()

ps:New Set() 接受一个数组或类数组对象,在Set内部, NAN相等,两个对象不等,可以用length检测,可以用for...of遍历

size:返回值的个数

add(val):添加值,返回set结构;

delete(val):删除值,返回布尔值

has(val):是否包含,返回布尔值

clear():清除所有成员,无返回值

与set类似,也是不重复值的集合

与set的区别:1.weakset 成员只能是对象,对象都是弱引用,垃圾回收机制不考虑,不可遍历

定义:类似于对象,也是键值dui的集合,但键可以是各种类型(键可以为对象),两个键严格相等才为同一个键。

Var m = new Map(), o = {1:2}

m.set(o, ‘hi’)

m.get(o)

m.has(o) //只有对同一个对象的引用才是同一个键

size:返回值的个数

set(key, val):添加值,返回Map结构;

Get(key): 获取值,返回val

Has(key):是否包含,返回布尔值

Delete(key):删除值,返回布尔值

Clear():清除所有成员,无返回值

定义:把泪数组对象和有iterator接口的对象(Set Map Array)转化为数组

使用:Array.from(arrayLike[, mapFn[, thisArg]]) 参数:类数组,处理函数map,map中的this指向的对象

Array.from([1, 2, 3, 4, 5], (n) =>n + 1) // 每个值都加一

const map = new Map()

map.set(‘k1’, 1)

map.set(‘k2’, 2)

Const a = Array.from(map) // [[‘k1’,1], [‘k2’, 2]]

const set1 = new Set()

Set1.add(1).add(2).add(3)

Var a = Array.from(set1) // [1,2,3]

console.log('%s', Array.from('hello world’)) //["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d"]

console.log('%s', Array.from('\u767d\u8272\u7684\u6d77’)) //["白", "色", "的", "海"]

var a = {0:1, 2:3, 4:5, length: 5}var b = {0:1, 2:3, 4:5, length: 3}

Array.from(a) // [1,undefined,3,undefined,4]

Array.from(b) // [1,undefined,3]

https://www.cnblogs.com/sqh17/p/8529401.html

1、splice(start,deletecount,item) 会改变原数组的方法。

arr.splice(i,n) 删除从i(索引值)开始之后的那个元素。返回值是删除的元素

参数: i 索引值 n 个数

splice(start,deletecount,item)方法:

2、split()是使用指定的分隔符字符串将字符串分割成子字符串,返回一个子字符串数组。

3、slice()方法可以对数组或字符串截取。

arr.slice(start,end) 切去索引值start到索引值end的数组,不包含end索引的值,返回值是切出来的数组。

** 2. 提取某个字符串的一部分,并返回一个新的字符串,不会改变原字符串。**

# ES6 symbol类型详解

https://juejin.cn/post/6925619440843227143

1、 定义:

symbol类型是新的原始数据类型,表示独一无二的值,其他的原始数据类型还有Number,String,Boolean,Null,Undefined;Object属于复杂数据类型。

2、symbols 作为对象的属性

3、利用Symbol的特性可定义内部私有属性或方法

forEach:没有返回值, 但不能使用break、continue和return语句

for…in:遍历数组索引、对象的属性。使用for…in遍历时,原型链上的所有属性都将被访问。

map: 有返回值。并且可以返回一个结果数组。但是map 遍历对象的话也会报错,所以map只能循环数组或者对象数组。

for...of :创建一个循环来迭代可迭代的对象。在 ES6 中引入的 for...of 循环,以替代 for...in 和 forEach() ,并支持新的迭代协议。for...of 允许你遍历 Arrays(数组), Strings(字符串), Maps(映射), Sets(集合)等可迭代的数据结构等。

循环返回的是value。

Maps(映射)

Map 对象就是保存 key-value(键值) 对。对象和原始值可以用作 key(键)或 value(值)。Map 对象根据其插入方式迭代元素。换句话说, for...of 循环将为每次迭代返回一个 key-value(键值) 数组。

Set(集合)

Set(集合) 对象允许你存储任何类型的唯一值,这些值可以是原始值或对象。 Set(集合) 对象只是值的集合。 Set(集合) 元素的迭代基于其插入顺序。 Set(集合) 中的值只能发生一次。如果您创建一个具有多个相同元素的 Set(集合) ,那么它仍然被认为是单个元素。

三、JavaScript Map 和 Object 的区别( https://www.cnblogs.com/ysx215/p/11387938.html )

在 Object 中, key 必须是简单数据类型(整数,字符串或者是 symbol),而在 Map 中则可以是 JavaScript 支持的所有数据类型,也就是说可以用一个 Object 来当做一个Map元素的 key。

Map 元素的顺序遵循插入的顺序,而 Object 的则没有这一特性。

Map 继承自 Object 对象。