es6中Set和Map数据结构

1. ES2015 Set 数据结构

ES2015 中提供了一个全新的数据结构,和数组类似,但其中的元素不允许重复,也就是每个元素在其中都是唯一的,我们可以称之为:集合。set认为两个NaN是相等的。

  • 集合中新增元素
const s = new Set()
// add 方法会返回集合本身,因此可链式调用
s.add(1).add(2).add(3).add(2)
console.log(s)  // Set {1, 2, 3}  重复添加的元素会被忽略
  • 集合的遍历
// 方法 1 使用 Set 自带 forEach 方法
s.forEach(i => console.log(i))
// 方法 2 使用 ES2015 新语法 for 
for (let i of s){
    console.log(i)
}
  • 获取集合长度等自有方法
// 1.获取集合长度
console.log(s.size)

// 2.判断集合当中是否存在某个值
console.log(s.has(100))  // false

// 3.删除集合中某个指定值,方法会返回是否删除成功
console.log(s.delete(3))  // true

// 4.清空集合
s.clear()
console.log(s)  // Set {}
  • 集合能够便于数组去重
const arr = [1, 2, 1, 3, 4, 2]
// 方法 1
const result_1 = Array.from(new Set(arr))
console.log(result_1)  // [1, 2, 3, 4]

// 方法 2
const result_2 = [...new Set(arr)]
console.log(result_2)  // [1, 2, 3, 4]

  1. set数据结构自带的add()方法
    const s4=new Set();
                // 向set结构中添加值使用add方法
                s4.add('a').add('b');
                console.log(s4.size);
  2. 向set结构中删除使用delete()方法

    // 从set结构中删除值用到的方法是delete
    const r1=s4.delete('a');
    console.log(s4.size);
    console.log(r1);

  3. 从set结构中获取数据长度用到的方法是size
    const s4=new Set();
                // 向set结构中添加值使用add方法
                s4.add('a').add('b');
                console.log(s4.size);
  4. 判断某个值是否是set数据结构中的成员has方法

    // 判断某个值是否是set数据结构中的成员使用has
    const r2=s4.has('c');
    console.log(r2);

  5. 遍历set数据结构从中取值forEach方法

    // 遍历set数据结构从中取值
    const s5=new Set(['a','b','c']);
    s5.forEach(value=>{
    console.log(value)
    })

  6. clear() 清除所有成员,没有返回值。

2. ES2015 Map 数据结构

Map 和对象很像,它们本质上都是键值对集合。不同的是,对象的键只能存放字符串类型,这就会导致我们在存放复杂数据时遇到一些问题,如下所示:

// object 键上存放复杂数据时遇到的问题
const obj = {}
obj[true] = 'value'
obj[123] = 'value'
obj[{ a: 1 }] = 'value'
console.log(Object.keys(obj))  // ['123', 'true', '[object Object]']

Map 就是为了解决上面的问题诞生的,Map 是严格意义上的键值对集合,它能够映射两个任意类型数据之间的对应关系。const m = new Map()const tom = { name : 'mn' }

// 1.设置键值映射关系
m.set(tom, 90)  
console.log(m)  // Map { { name: 'tom' } => 90}
// 2.根据键获取对应值
m.get(tom)
// 3.判断某键是否存在
m.has(tom)
// 4.删除某个键
m.delete(tom)
// 5.清空所有键
m.clear()
// 6.遍历所有键值,需要注意的是首个参数是值,第二参数是键
m.forEach((value, key) => {
    console.log(value, key)
})





三、set的适用场景
       //1.set去重数组中重复成员的方法
            arry=[ 2, 3, 4 ,4];
            arry=[...new Set(arry)];
            console.log(arry);
            //2.set去除字符串中重复的字符
            str='abbccddff';
            str=[...new Set(str)].join('');
            console.log(str);

        //Array.from方法可以将Set结构转为数组,直接将set放到[]中也可以将其转化为数组
        const items=new Set([1,2,3,4]);
        const array1=Array.from(items);
        console.log(array1);

        //这就提供了去除数组重复成员的另一种方法。
        function dedupe(array) {
        return Array.from(new Set(array));
        }
        console.log(dedupe([1, 1, 2, 3]));

 

四、map的适用场景

待补全
 
勤学似春起之苗,不见其增,日有所长; 辍学如磨刀之石,不见其损,日所有亏!
原文地址:https://www.cnblogs.com/qiaozhiming123/p/14644558.html