Web前端最新JavaScript进阶(二十二):集合 Set 和 Map_vue set集合(3),字节跳动+京东+360+网易面试题整理

最后

面试一面会问很多基础问题,而这些基础问题基本上在网上搜索,面试题都会很多很多。最好把准备一下常见的面试问题,毕竟面试也相当与一次考试,所以找工作面试的准备千万别偷懒。面试就跟考试一样的,时间长了不复习,现场表现肯定不会太好。表现的不好面试官不可能说,我猜他没发挥好,我录用他吧。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

96道前端面试题:

常用算法面试题:

前端基础面试题:
内容主要包括HTML,CSS,JavaScript,浏览器,性能优化

const s = new Set([1,2,3,4]);

s.clear();
console.log(s);  // Set {}

Set的遍历器——keys() 返回键名的遍历器,values() 返回键值的遍历器,entries() 返回键值对的遍历器,forEach() 使用回调函数遍历每个成员

const s = new Set([1,2,3,4]);

console.log(s.keys());  // SetIterator { 1, 2, 3, 4 }
console.log(s.values());   //SetIterator { 1, 2, 3, 4 }
console.log(s.entries());   //SetIterator { [ 1, 1 ], [ 2, 2 ], [ 3, 3 ], [ 4, 4 ] }


//该方法可以接收三个参数,分别是:键值,健名,set本身
s.forEach(function(value,key,set){
    console.log(value+'lina');
    console.log(set)
})

利用Set为数组去重——直接将要给数组放入到,set构造方法中即可

const arr = [1,2,3,45,2,3,4,13,5,7,1,3,2]

const s = new Set(arr);

console.log(s);  // Set { 1, 2, 3, 45, 4, 13, 5, 7 }
console.log(arr);   //[ 1, 2, 3, 45, 2, 3, 4, 13, 5, 7, 1, 3, 2 ]

console.log([...s]);//将set转成数组,结果是[ 1, 2, 3, 45, 4, 13, 5, 7 ]
 

三、Map数据结构

Map数据结构概述 字典:是用来存储不重复key的Hash结构,不同于集合(Set)的是,字典使用的是[键,值]的形式来存储数据的

JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。

为了解决这个问题,ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。

创建Map和Map类的属性——获取Map类中有几个数据

const  m = new Map([
    ['a',1],
    ['b',2]
]);

console.log(m);  //Map { 'a' => 1, 'b' => 2 }
console.log(m.size);  //2

Map类的方法—set(key,value) 设置键名key对应的键值为value,然后返回整个Map结构,如果key已经有值,则键值会被更新,否则就生成该键

Map类的方法—get(key)——get方法读取key对应的键值,如果找不到key,返回undefined

const  m = new Map([
    ['a',1],
    ['b',2]
]);

m.set('miaov','ketang').set('xing','huang');//因为返回的是Map结构本身,所以可以使用调用链的方式
console.log(m);//Map { 'a' => 1, 'b' => 2, 'miaov' => 'ketang', 'xing' => 'huang' }


m.set('b',5);//有相同的key,值会被覆盖
console.log(m); //Map { 'a' => 1, 'b' => 5, 'miaov' => 'ketang', 'xing' => 'huang' }

console.log(m.get('b'));  //5
console.log(m.get('c'));  //undefined

Map类的方法—delete(key) 删除某个键,删除成功放回true,如果删除失败,返回false

const  m = new Map([
    ['a',1],
    ['b',2]
]);

console.log(m.delete('b'));//true
console.log(m.delete('c'));//false
console.log(m);//Map { 'a' => 1 }

Map类的方法—has(key) 方法返回一个布尔值,表示某个键是否在当前Map对象之中

Map类的方法—clear() 清楚Map结构中的所有数据,没有返回值

const  m = new Map([
    ['a',1],
    ['b',2]
]);

console.log(m.has('b'));//true
console.log(m.has('c'));//false

m.clear();
console.log(m);//Map {}

Map的遍历器 keys() 返回键名的遍历器;values() 返回键值的遍历器;entries() 返回键值对的遍历器;forEach() 使用回调函数遍历每个成员

const  m = new Map([
    ['a',1],
    ['b',2],
    ['c',3]
]);

console.log(m.keys());//MapIterator { 'a', 'b', 'c' }
console.log(m.values()); //MapIterator { 1, 2, 3 }
console.log(m.entries());  //MapIterator { [ 'a', 1 ], [ 'b', 2 ], [ 'c', 3 ] }

//该方法可以接收三个参数:值,键,Map本身
m.forEach(function (value, key, Map) {
    console.log(value);
    console.log(key);
})

Map在使用过程中的一些注意事项一两个NaN本身是不相等的,但在Map结构中,NaN作为键的话,视为相等的(同一个键)

const  map = new Map();
map.set(NaN,1);
map.set(NaN,2);

console.log(map); //Map { NaN => 2 }

Map在使用过程中的一些注意事项二 如果Map结构中的key是一个对象的情况下,每个对象都是不同的键,即使是两个空的对象,因为两个对象的地址值不同,以后引用别人的插件,使用对象作为键,就能避免同名碰撞的情况

const map = new Map();

map.set({},'x').set({},'y');

console.log(map); //Map { {} => 'x', {} => 'y' }

Map 结构转为数组结构——比较快速的方法是使用扩展运算符(…)。

const  m = new Map([
    ['a',1],
    ['b',2]
]);

console.log([...m.keys()]);  //[ 'a', 'b' ]
console.log([...m.values()]);  //[ 1, 2 ]
console.log([...m.entries()]);   //[ [ 'a', 1 ], [ 'b', 2 ] ]
console.log([...m]);   //[ [ 'a', 1 ], [ 'b', 2 ] ]

数组结构转为Map结构——将数组传入 Map 构造函数,就可以转为 Map

const arr = [[1,'one'],[2,'two'],[3,'three']];

const map = new Map(arr);

console.log(map);//Map { 1 => 'one', 2 => 'two', 3 => 'three' }

Map结构转为对象——如果所有 Map 的键都是字符串,它可以转为对象

const myMap = new Map();

myMap.set('yes', true)
myMap .set('no', false);
console.log(myMap);   //Map { 'yes' => true, 'no' => false }

const obj = strMapToObj(myMap);
console.log(obj); //{ yes: true, no: false }

function strMapToObj(strMap) {
    let obj = Object.create(null);
    for (let [k,v] of strMap) {
        obj[k] = v;
    }
    return obj;
}

对象转为Map结构

function objToStrMap(obj) {
    let strMap = new Map();
    for (let k of Object.keys(obj)) {
        strMap.set(k, obj[k]);
    }
    return strMap;
}

const map = objToStrMap({yes: true, no: false});
console.log(map);  //Map { 'yes' => true, 'no' => false }
 

Map结构转为JSON对象 Map 转为 JSON 要区分两种情况。一种情况是,Map 的键名都是字符串,这时可以选择转为对象 JSON。 需要先将其转成对象

function strMapToJson(strMap) {
    return JSON.stringify(strMapToObj(strMap));


### 最后

面试一面会问很多基础问题,而这些基础问题基本上在网上搜索,面试题都会很多很多。最好把准备一下常见的面试问题,毕竟面试也相当与一次考试,所以找工作面试的准备千万别偷懒。面试就跟考试一样的,时间长了不复习,现场表现肯定不会太好。表现的不好面试官不可能说,我猜他没发挥好,我录用他吧。

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

**96道前端面试题:**

- ![](https://img-blog.csdnimg.cn/img_convert/f254e67a44663d4e37931a7eee35649e.webp?x-oss-process=image/format,png)

**常用算法面试题:**

- ![](https://img-blog.csdnimg.cn/img_convert/c961eda93aac01765444ee03119ef88b.webp?x-oss-process=image/format,png)

**前端基础面试题:**
内容主要包括**HTML,CSS,JavaScript,浏览器,性能优化**

- ![](https://img-blog.csdnimg.cn/img_convert/714f19888f59b75acaba762778af934b.webp?x-oss-process=image/format,png)

实战+最新讲解视频】](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

**96道前端面试题:**

- [外链图片转存中...(img-uycGdT7d-1715907128278)]

**常用算法面试题:**

- [外链图片转存中...(img-V68Zo9Pj-1715907128279)]

**前端基础面试题:**
内容主要包括**HTML,CSS,JavaScript,浏览器,性能优化**

- [外链图片转存中...(img-KoHW1b0o-1715907128279)]

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值