面试常问---Set和Map

一、Set数据解构

Set本身是一个构造函数,用来生成Set数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值;

创建Set实例

const s = new Set();

Set函数可以接收数组、字符串、undefined,null等参数,初始化;

1.利用Set里的数据不能重复的特点进行数组去重;

let s = new Set([1, 2, 2, 3, 3, 4]);
console.log(s); //Set(4) {1, 2, 3, 4}
//返回的类数组,可以将类数组转换成数组
let arr = Array.from(s);
console.log(arr); // [1, 2, 3, 4]

2.add()方法,添加数据

/* set添加数据 */
const s2 = new Set();
[1, 33, 33, 44, 55, 6, 6].forEach(function (item) {
    s2.add(item)
})
console.log(s2);

3.delete() 删除元素返回boolean值,删除成功返回true 否则返回false改变原set数据

console.log(s.delete(9)); //-->false
console.log(s.delete(5)); //-->true

4.has() 查找某个值是否存在方法 ,存在返回true,否则返回false

console.log(s.has(1)); //-->true

5.clear() 清除所有成员,返回undefined,改变原set数据

console.log(s.clear()); //-->undefined

tips:Set集合也有keys(),values(), entries();

<script>
    var s = new Set(["前端","大数据","后端","云计算","测试"]);
    // console.log(s.keys()); /* ===>keys返回的是Set集合的内容 */
    // console.log(s.values()); /* ===>values返回的也是Set集合的内容 */
    // console.log(s.entries()); /* ===>entries返回的 key是内容,value也是内容 */

    for(var v of s.keys()){
        console.log(v); /* "前端","大数据","后端","云计算","测试" */
    }

    for(var v of s.values()){
        console.log(v); /* "前端","大数据","后端","云计算","测试" */
    }

    for(var v of s.entries()){
        console.log(v); /* ['前端', '前端'] ['大数据', '大数据'] ['后端', '后端'] ['云计算', '云计算'] ['测试', '测试'] */
    }
</script>

二、Map数据结构 

Map集合的键值对,是只不限于字符串;可以以任何类型的值(包括对象)作为key ;

也没有隐式类型转换,数字5与字符串‘5’会被判定为两种类型,可以分别作为两种独立的键出现在程序中。

注意:Map里面不可以放重复的项;

1.实例化Map

const m = new Map();

2.Map属性----Map.size属性 ;返回map的元素数(长度);

Map方法:

3.set()方法,添加数据返回添加后的map(给已存在的键赋值后会覆盖掉之前的值);

m.set('name', 'jack');
m.set(5, '我是王老五');
m.set('5', '我是字符王老五');
m.set({
    a: '我是对象'
}, {
    b: '我是value'
})
console.log(m);

4. get() 方法 获取某个key的值,返回key对应的值,没有则返回undefined;

console.log(m.get(5)); //--> 我是王老五

5.has() 方法 检测是否存在某个key,返回布尔值

console.log(m.has('5')); //--> true

6.delete() 方法 删除某个key及其对应的value,返回布尔值,成功删除则为true

console.log(m.delete(5)); // --> true

7.clear() 方法 清除所有的值,返回undefined

console.log(m.clear()); //--> undefined

Map遍历

注意:map的遍历顺序就是插入顺序;

tips:遍历迭代器循环方法 for-of 循环,for-of循环不能循环对象,可以循环数组;

       for-in循环是用来循环对象的

(1)keys()  获取map的所有key

console.log(m.keys()); //MapIterator {'name', 5, '5', {…}}
for (let key of m.keys()) {
     console.log(key); //返回每一个 key的值
   }

(2) values()  获取map的所有值

console.log(m.values()); //MapIterator {'jack', '我是王老五', '我是字符王老五', {…}}
for (let v of m.values()) {
     console.log(v); //返回每一个 values的值
    }

(3) entries()  获取map的所有成员

//MapIterator {'name' => 'jack', 5 => '我是王老五', '5' => '我是字符王老五', {…} => {…}}
console.log(m.entries());

注意:for-of循环Map.entries()迭代器,返回的k-v 是以数组的形式呈现,['name', 'jack']
           key 在数组中的第一个, value 是数组的第二个

for (let kv of m.entries()) {
    console.log(kv); //返回每一个 values的值
    //注意:此时返回的k-v 是以数组的形式呈现,['name', 'jack']
    //key 在数组中的第一个, value 是数组的第二个
}

使用解构赋值的方式循环Map.entries()迭代器;

for (let [key, value] of m.entries()) {
    //console.log(kv); //返回每一个 values的值
    //注意:此时返回的k-v 是以数组的形式呈现,['name', 'jack']
    //key 在数组中的第一个, value 是数组的第二个
    // let [key, value] = kv;
    console.log(key, value);
}

(4)对象的keys(),values(),entries();

对象中的这些方法是Object的

let obj = {
    name: 'tom',
    age: 18
};
console.log(Object.keys(obj)); //['name', 'age']
console.log(Object.values(obj)); //['tom', 18]
console.log(Object.entries(obj)); //[['name', 'age'], ['tom', 18]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值