2021-04-29 17:16:40 +08:00

219 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# setmap
## 选择
1. 下面哪个不是set的方法
A.add B.delete C.has D.get
答案 D
2. 下面代码执行的结果为
```
let set = new Set([1, 2, 3, 4, 4]);
set.add(5)
set.add(6)
set.add(5)
console.log(set.size)
```
A.8 B.5 C.6 D. 4
答案 C
3. 下面代码执行的结果为
```
let set = new Set([1, 2, 3, 4, 4]);
set.set(5)
set.add(6)
set.add(5)
console.log(set.size)
```
A.报错 B.5 C.6 D. 4
答案 A
4. 下面代码执行的结果为
```
var mySet = new Set([1, 2, 3, 4, 4]);
console.log([...mySet]);
```
A.[1, 2, 3, 4, 4] B.[1, 2, 3, 4] C.[[1, 2, 3, 4, 4]] D.[]
答案 B
5. 下面代码的执行结果为
```
var myMap = new Map();
var keyObj = {},
myMap.set(keyObj, "和键 keyObj 关联的值");
console.log(myMap.get(keyObj));
console.log(myMap.get({}));
```
A."和键 keyObj 关联的值" {} B.报错 什么都不出 C.undefined null D."和键 keyObj 关联的值" undefined
答案 D
解析
因为 keyObj !== {}
6. 下面代码的执行结果为
```
var myMap = new Map();
var keyFunc = function () {}, // 函数
myMap.set(keyFunc, "和键 keyFunc 关联的值");
console.log(myMap.get(keyFunc)); // "和键 keyFunc 关联的值"
console.log(myMap.get(function() {})) // undefined, 因为 keyFunc !== function () {}
```
A."和键 keyFunc 关联的值" "和键 keyFunc 关联的值" B.报错 什么也不出
C."和键keyFunc 关联的值" undefined D.undefined undefined
答案 C
7. 下面代码的执行结果为
```
var myMap = new Map();
myMap.set(NaN, "not a number");
console.log(myMap.get(NaN)); // "not a number"
var otherNaN = Number("foo");
console.log(myMap.get(otherNaN)); // "not a number"
```
A.
8.
## 填空
1. 下面代码执行后 size的值打印出来是
```
let s = new Set();
s.add([1]);
s.add([1]);
console.log(s.size);
```
答案 2
解析:
这个问题类似于问这个:
let a = [1];
let b = [1];
console.log(a === b); // false
简单的说就是a和b是两个数组两个引用对象怎么可能相等呢所以对于set来说这俩不重复所以是2
1. 下面代码执行后 con的值打印出来是
答案 undefined
解析 因为set的时候用的数组[1]和get的时候用的数组[1]是分别两个不同的数组只不过它们元素都是1。它们是分别定义的两个数组并不是同一个值。
```
let map = new Map();
map.set([1],"ES6系列");
let con = map.get([1]);
console.log(con);
```
3. 用 声明一个set结构
答案 new Set
4. 通过 可以实现对set结构中元素的遍历
答案 for of foreach
4. 下面代码执行的结果为
```
var first = new Map([[1, 'one'], [2, 'two'], [3, 'three'],]);
var second = new Map([[1, 'uno'], [2, 'dos']]);
var merged = new Map([...first, ...second]);
console.log(merged)
```
答案 { 1 → "uno", 2 → "dos", 3 → "three" }
解析 合并两个 Map 对象时,如果有重复的键值,则后面的会覆盖前面的,对应值即 unodos three
4. 下面代码执行的结果为
```
var myMap = new Map();
var keyString = "a string";
myMap.set(keyString, "和键'a string'关联的值");
var jieguo = myMap.get(keyString); // "和键'a string'关联的值"
var jieguo1 = myMap.get("a string");
console.log(jieguo,jieguo1)
```
答案 和键'a string'关联的值 和键'a string'关联的值
map 遍历生成函数及其作用
答案
Map.prototype.keys():返回键名的遍历器。
Map.prototype.values():返回键值的遍历器。
Map.prototype.entries():返回所有成员的遍历器。
Map.prototype.forEach():遍历 Map 的所有成员。
## 简答题
1. maps和objects的区别
答案
一个 Object 的键只能是字符串或者 Symbols但一个 Map 的键可以是任意值。
Map 中的键值是有序的FIFO 原则),而添加到对象中的键则不是。
Map 的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算。
Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。
2. WeakSet和Set的区别
答案
WeakSet的成员只能是对象而不能是其他类型的值
WeakSet中的对象都是弱引用即垃圾回收机制不考虑WeakSet对该对象的引用也就是说如果其他对象都不再引用该对象那么垃圾回收机制会自动回收该对象所占用的内存不考虑该对象还存在于WeakSet之中。这个特点意味着无法引用WeakSet的成员因此WeakSet是不可遍历的。
3. set 和 map的区别
答案 Set是一种类似数组的集合类型它与数组不同的是不允许存在重复数据常用操作方法有add,delete,has,clear等遍历使用forEach
Map是一种类似对象的集合类型它与对象不同的是key可以接受对象类型常用的操作方法有set,get,has,delete等遍历使用forEach
4. 定义一个函数 将传入的数组元素去重后返回(可以写多种方法)
详见 https://segmentfault.com/a/1190000016418021?utm_source=tag-
5. 用 foreach 和 for of 分别遍历下面这个set
var myMap=new Map()
myMap.set(0, "zero");
myMap.set(1, "one");
var first = new Map([[1, 'one'], [2, 'two'], [3, 'three'],]);
var second = new Map([[1, 'uno'], [2, 'dos']]);
var merged = new Map([...first, ...second]);
6.module、import