JS-Set和Map

253 阅读2分钟

Set

本质上是一个构造函数,特点是创建了一个去重数组。

Set的方法

  1. Set.prototype.add(value):添加某个值,返回 Set 结构本身。
  2. Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
  3. Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。
  4. Set.prototype.clear():清除所有成员,没有返回值。
  5. Set.prototype.keys():返回键名的遍历器。
  6. Set.prototype.values():返回键值的遍历器。
  7. Set.prototype.entries():返回键值对的遍历器。
  8. Set.prototype.forEach():使用回调函数遍历每个成员。 注意set没有键名,所以键值是一样的值。

1. set基本用法

let arr = [3, 5, 2, 2, 5, 5];
let arrString = 'ausiejsaasiduwq';
let arrSet = new Set(arr);
let strSet = new Set(arrString);
console.log(arrSet); // Set(3) { 3, 5, 2 }
console.log(strSet); // Set(9) { 'a', 'u', 's', 'i', 'e', 'j', 'd', 'w', 'q' }
arrSet.add(4);
arrSet.delete(3);
arrSet.has(5);
strSet.clear();
console.log(arrSet); // Set(3) { 5, 2, 4 }
console.log(strSet); // Set(0) {}

2. set结合扩展运算符(...)的用法

let arr = [3, 5, 2, 2, 5, 5];
let arrString = 'ausiejsaasiduwq';
let arrSet = [...new Set(arr)];
let strSet = [...new Set(arrString)];
console.log(arrSet); // [ 3, 5, 2 ]
console.log(strSet); 
//['a', 'u', 's','i', 'e', 'j','d', 'w', 'q']

3. 去重排序

冒泡排序

let arr = [3, 5, 2, 2, 5, 5];
let arrString = 'ausiejsaasiduwq';
let arrSet = [...new Set(arr)];
let strSet = [...new Set(arrString)];
let arrSort = arrSet.sort((x,y)=>{
	console.log(x,y)
	    if (x < y) {
	        return -1;
	    }
	    if (x > y) {
	        return 1;
	    }
	    return 0;
});
let strSort = strSet.sort((x,y)=>{
// 字符串会以ASCII的大小比较所以进行统一处理
		str1 = x.toUpperCase(); 
		str2 = y.toUpperCase();
	    if (x < y) {
	        return -1;
	    }
	    if (x > y) {
	        return 1;
	    }
	    return 0;
});
console.log(arrSort); // [ 2, 3, 5 ]
console.log(strSort); // ['a', 'd', 'e','i', 'j', 'q','s', 'u', 'w']

Map

本质上是键值对的集合,但是传统上只能用字符串当作键。

Map的方法

  1. Map.prototype.set(key, value):设置键名key对应的键值为value,然后返回整个 Map 结构。如果key已经有值,则键值会被更新。
  2. Map.prototype.get(key):读取key对应的键值,如果找不到key,返回undefined。
  3. Map.prototype.has(key):返回一个布尔值,表示某个键是否在当前 Map 对象之中。
  4. Map.prototype.delete(key):删除某个键,返回true。如果删除失败,返回false。
  5. Map.prototype.clear():清除所有成员。
  6. Map.prototype.keys():返回键名的遍历器。
  7. Map.prototype.values():返回键值的遍历器。
  8. Map.prototype.entries():返回键值对的遍历器。
  9. Map.prototype.forEach():使用回调函数遍历每个成员。

map基本用法

let obj = {'str1':1,'str2':2};
let map = new Map(Object.entries(obj));
map.set('str3',3)
console.log(Object.entries(obj)); // [ [ 'str1', 1 ], [ 'str2', 2 ] ]
console.log(map); // Map(3) { 'str1' => 1, 'str2' => 2, 'str3' => 3 }
console.log(map.entries()); 
// [Map Entries] { [ 'str1', 1 ], [ 'str2', 2 ], [ 'str3', 3 ] }