前端面试题:set和map

有时候会被问到set和map的区别,下面我总结了一下set和map的特点和区别。以及他们在一些算法题中的妙用。

Map

Map是一组键值对的结构,具有极快的查找速度。

借用廖雪峰老师的例子,假设要根据同学的名字查找对应的成绩,如果用Array实现,需要两个Array

const names = ['Michael', 'Bob', 'Tracy'];
const scores = [95, 75, 85];

给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,Array越长,耗时越长。

如果用Map实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用JavaScript写一个Map如下:

const m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael'); // 95

初始化Map需要一个二维数组,或者直接初始化一个空Map

var m = new Map();

map的其他方法

var m = new Map(); // 初始化一个空Map
m.set('key', value); // 添加新的key-value
m.has('key'); // 是否存在一个指定key
m.get('key'); // 是否存在一个指定key
m.delete('key'); // 删除key

Set

SetMap类似,也是一组key的集合,但不存储value,特点是在Set中,没有重复的key。

要创建一个Set,需要提供一个Array作为输入,或者直接创建一个空Set

var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3

重复的元素会被过滤掉,重复添加的元素不是不可以添加,而是不起作用:

var s = new Set([1, 2, 3]); // 含1, 2, 3
s.add(3)
s; // Set {1, 2, 3}
s.add(3)
s; // Set {1, 2, 3}

同样是通过delete删除元素:

s.delete(key);

算法

前端的一些算法面试题相对来说算是简单的,因为有跟我一起学习的后端的朋友,我们面试的算法题感觉都不在一个档次,见得最多的数组去重,数组中出现的最多的元素分别对应上了set和map:

数组去重set简单粗暴:

var arr = [1,2,3,3,2,1,5,1];
let a = [...new Set(arr)]
console.log(a)

 获取最多元素:

function more(arr){
	var max = 0;
	var newMap = new Map();
	for(var i = 0 ; i < arr.length ; i++){
		if(newMap.has(arr[i]*1)){
			newMap.set(arr[i],newMap.get(arr[i])*1+1);
		}else{
			newMap.set(arr[i],1);
		}
	}
	console.log(newMap);
}

元素做key,出现的次数作为value,上边只是把map集合搞出来了,但是怎么拿到那个最大的值,我还要去研究一下,等我研究出来了,我再回来更新博客。

你可能感兴趣的:(三大基础,个人总结,面试题库,算法,面试,javascript)