1. ES2015 Set 数据结构
ES2015 中提供了一个全新的数据结构,和数组类似,但其中的元素不允许重复,也就是每个元素在其中都是唯一的,我们可以称之为:集合。set认为两个NaN是相等的。
- 集合中新增元素
const s = new Set()
// add 方法会返回集合本身,因此可链式调用
s.add(1).add(2).add(3).add(2)
console.log(s) // Set {1, 2, 3} 重复添加的元素会被忽略
- 集合的遍历
// 方法 1 使用 Set 自带 forEach 方法
s.forEach(i => console.log(i))
// 方法 2 使用 ES2015 新语法 for
for (let i of s){
console.log(i)
}
- 获取集合长度等自有方法
// 1.获取集合长度
console.log(s.size)
// 2.判断集合当中是否存在某个值
console.log(s.has(100)) // false
// 3.删除集合中某个指定值,方法会返回是否删除成功
console.log(s.delete(3)) // true
// 4.清空集合
s.clear()
console.log(s) // Set {}
- 集合能够便于数组去重
const arr = [1, 2, 1, 3, 4, 2]
// 方法 1
const result_1 = Array.from(new Set(arr))
console.log(result_1) // [1, 2, 3, 4]
// 方法 2
const result_2 = [...new Set(arr)]
console.log(result_2) // [1, 2, 3, 4]
set数据结构自带的add()方法
const s4=new Set(); // 向set结构中添加值使用add方法 s4.add('a').add('b'); console.log(s4.size);
- 向set结构中删除使用delete()方法
// 从set结构中删除值用到的方法是delete
const r1=s4.delete('a');
console.log(s4.size);
console.log(r1); - 从set结构中获取数据长度用到的方法是size
const s4=new Set(); // 向set结构中添加值使用add方法 s4.add('a').add('b'); console.log(s4.size);
- 判断某个值是否是set数据结构中的成员has方法
// 判断某个值是否是set数据结构中的成员使用has
const r2=s4.has('c');
console.log(r2); - 遍历set数据结构从中取值forEach方法
// 遍历set数据结构从中取值
const s5=new Set(['a','b','c']);
s5.forEach(value=>{
console.log(value)
}) - clear() 清除所有成员,没有返回值。
2. ES2015 Map 数据结构
Map 和对象很像,它们本质上都是键值对集合。不同的是,对象的键只能存放字符串类型,这就会导致我们在存放复杂数据时遇到一些问题,如下所示:
// object 键上存放复杂数据时遇到的问题
const obj = {}
obj[true] = 'value'
obj[123] = 'value'
obj[{ a: 1 }] = 'value'
console.log(Object.keys(obj)) // ['123', 'true', '[object Object]']
Map 就是为了解决上面的问题诞生的,Map 是严格意义上的键值对集合,它能够映射两个任意类型数据之间的对应关系。const m = new Map()
const tom = { name : 'mn' }
// 1.设置键值映射关系
m.set(tom, 90)
console.log(m) // Map { { name: 'tom' } => 90}
// 2.根据键获取对应值
m.get(tom)
// 3.判断某键是否存在
m.has(tom)
// 4.删除某个键
m.delete(tom)
// 5.清空所有键
m.clear()
// 6.遍历所有键值,需要注意的是首个参数是值,第二参数是键
m.forEach((value, key) => {
console.log(value, key)
})
三、set的适用场景
//1.set去重数组中重复成员的方法 arry=[ 2, 3, 4 ,4]; arry=[...new Set(arry)]; console.log(arry); //2.set去除字符串中重复的字符 str='abbccddff'; str=[...new Set(str)].join(''); console.log(str);
//Array.from方法可以将Set结构转为数组,直接将set放到[]中也可以将其转化为数组
const items=new Set([1,2,3,4]);
const array1=Array.from(items);
console.log(array1);
//这就提供了去除数组重复成员的另一种方法。
function dedupe(array) {
return Array.from(new Set(array));
}
console.log(dedupe([1, 1, 2, 3]));
四、map的适用场景
待补全