Map和Set相关以及如何去重数组

数组去重的方法:

(1).数组的扩展运算符...
let arr = [1,2,3,4,5,3,2,1,3,4,3];
console.log( arr);
let s = new Set(arr);
// 将set结构数据变成数组
// 数组的扩展运算符...
let newArr = [...s];
console.log( s);
console.log(newArr);
(2).Array.from()
let arr = [1,2,3,4,5,3,2,1,4,3];
console.log(arr);
let s = new Set(arr);
// Array.from()将set结构数据转成数组
let newArr = Array.from(s);
console.log(newArr);
(3).传统的两层for循环
function unique(arr){
    for(let i = 0;  i < arr.length; i ++){
        for(let j = i + 1;j < arr.length; j ++){
            if(arr[j] === arr[i]){
                arr.splice(j,1);
                j --;
            }
        }
    }
    return arr;
}
let arr = [1,2,3,4,3,2,3,1,5,6,7,5,6,7];
console.log(unique(arr));

Set结构数据的遍历

(1):直接用forEach()
let s = new Set(['a','b','c','b','c','b','c','c','d','c','d']);
console.log(s);
s.forEach(item => console.log(item));
(2).keys()  遍历器:可遍历的数据集合
for(let item of s.keys()){
    console.log(item);
}

(3).values()
for(let item of s.values()) {
    console.log(item);
}
(4).entries()
for(let item of s.entries()) {
    console.log(item);
}

Map数据结构

一:注意的点

let m = new Map([
    [{a:1},'tom'],
    [123,'buddy']
]);
console.log(m.get({a: 1}));//undefined 原因:传址,解决办法如下:

let obj = {a:1};
let m = new Map([
    [obj,'tom'],
    [123,'buddy']
]);
console.log(m.get(obj));//tom


二:基本方法的使用

(1)let m = new Map(); 
m.set(123,'buddy'); 
console.log(m.get(123));

(2)let m = new Map([
    [123,'buddy'],
    ['a',{x:1,y:2}],
    [3>1,666]
]);
console.log(m.get(true));
console.log(m.has('a'));
m.delete(123);
console.log(m);

Map数据的遍历:

let m = new Map([
    [123,'buddy'],
    ['name','tom'],
    [1>2,'baidu.com']
]);
(1) m.forEach((value,key) => console.log(value + ":" + key));

(2) for(let key of m.keys()) {
    console.log(key);//遍历的是[123,'name',false]
}

(3) for(let value of m.values()) {
    console.log(value);//遍历的是['buddy','tom','baidu.com']
}

(4) for(let entry of m.entries()) {
    console.log(entry);//遍历的是原结构
}
补: ...运算符在Map结构数据中的用法
let m = new Map([
    [123,'buddy'],
    ['name','tom'],
    [1<2,'baidu.com']
]);
let result = [...m];
console.log(result);//二维数组
console.log(result[2][0]);
let res = [...m.keys()];//values() entries()同
console.log(res);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值