es6:数据结构set和map&weakset和weakmap(代码片段)

还是不会呀 还是不会呀     2023-01-13     385

关键词:


在ES6以前存储数据的结构有两种: 数组对象

在ES6中新增两种数据结构:SetMap

Set

Set里边的数据是不会重复的

基本使用

add方法添加

const set = new Set();
set.add(1);
set.add(2);
set.add(3);
set.add(2);
set.add(1);
console.log(set); // Set(4)  1, 2, 3 

传入数组

const nums = [1, 2, 3, 2, 1];
const set1 = new Set(nums);
console.log(set1); // Set(3)  1, 2, 3 

Set结构传化为数组

const nums = [1, 2, 3, 2, 1];
const set = new Set(nums);
console.log(set); // Set(3)  1, 2, 3 

const arr1 = [...set];
const arr2 = Array.from(set);
console.log(arr1); // [ 1, 2, 3 ]
console.log(arr2); // [ 1, 2, 3 ]

常见方法

const set = new Set();

// 1、add方法向Set实例内添加数据,已经存在的添加不成功
set.add(1);
set.add(2);
set.add(1);
console.log(set); // Set(2)  1, 2 

// 2、delete方法删除Set实例内对应的数据
set.delete(1);
console.log(set); // Set(1)  2 

// 3、has方法判断Set实例内是否存在对应数据
console.log(set.has(2)); // true

// 4、forEach(for...of..)遍历Set实例内的数据
set.add(3);
set.forEach((item) => console.log(item)); // 2 /n 3

for (const item of set) 
  console.log(item); // 2 /n 3


// 5、clear方法清空Set实例内的所有数据
set.clear();
console.log(set); // Set(0) 

WeakSet

WeakSet的特点

存在一个与Set相似的数据结构WeakSet

区别: 1、WeakSet只能添加对象类型,而Set可以添加其他基本数据类型。

​ 2、WeakSet对数据的引用是弱引用,而Set对数据的引用是强引用,GC算法会对弱引用对象进行回收。

基本使用

const info =  name: "fzb" ;

// 创建一个 WeakSet实例
const weakSet = new WeakSet();

// 1、add方法
weakSet.add();
weakSet.add(info);

// 2、has方法
console.log(weakSet.has(info)); // true

// 3、delete方法
weakSet.delete(info);

// WeakSet是没有clear方法,也是不能遍历的
console.log(weakSet); // WeakSet  <items unknown> 

WeakMap的应用

const weakSet = new WeakSet();

class Person 
  constructor() 
    weakSet.add(this);
  
  running() 
    if (!weakSet.has(this)) 
      console.log("只能通过创造出来的实例对象调用该方法");
      return;
    
    console.log("running~");
  


const person = new Person();
person.running(); // running~
person.running.call( name: "fzb" ); // 只能通过创造出来的实例对象调用该方法
console.log(person); // Person 

Map

ES6新增Map用来处理映射关系,普通的对象也可以处理映射关系,但是这是一种简单的处理,普通的对象的key值,最终是转化为 字符串,而Mapkey是不会转化为字符串的。

基本使用

创建方法一

const map = new Map();
map.set(1, "fzb");
map.set("2", 21);
map.set(, "changsha");
console.log(map);
// Map(3)  1 => 'fzb', '2' => 21,  => 'changsha' 

创建方法二

const map = new Map([
  [1, "fzb"],
  ["2", 21],
  [, "changsha"],
]);
console.log(map);
// Map(3)  1 => 'fzb', '2' => 21,  => 'changsha' 

常见方法

// 创建Map实例
const map = new Map();

// 1、set方法,向Map实例添加映射
map.set(1, "fzb");
map.set(, 21);

// 2、get方法,获取Map实例内对应key值得映射
console.log(map.get(1)); // fzb

// 3、has方法,判断Map实例内是否有对应的映射
console.log(map.has(1)); // true

// 4、delete方法,删除对应key值得映射,删除成功返回true
console.log(map.delete(1)); // true

// 5、forEach(for...of...)遍历
map.forEach((item, key) => 
  console.log(item, key); // 21 
);
for (const [key, item] of map) 
  console.log(key, item); //  21


// 6、clear方法,清空全部映射
map.clear();
console.log(map); // Map(0) 

WeakMap

WeakMap的特点

存在一个与Map相似的数据结构WeakMap

区别:1、WeakMap的key值只能是对象类型的,而Map的key值可以是其他的数据类型

​ 2、WeakMap的key值的引用是弱引用,而Map的key值得引用是强引用,GC算法会对弱引用对象进行回收。

基本使用

const info = ;
const weakMap = new WeakMap();

// 1、set方法
weakMap.set(, "fzb");
weakMap.set(info, 21);

// 2、has方法
console.log(weakMap.has(info)); // true

// 3、get方法
console.log(weakMap.get(info)); // 21

// 4、delete方法
console.log(weakMap.delete(info)); // true

// WeakMap实例是没有clear方法和不能遍历的
console.log(weakMap); // WeakMap  <items unknown> 

强引用和弱引用

强引用是不会被GC算法回收的,但弱引用会被GC算法回收

/**
 * 对于Set,对数据的引用是强引用,在将obj1加入到set中,set就有指向obj1的引用,
 * 当obj1=null,set在新版的ECMAScript中式存放在variable_中的,GC算法标记清除算法
 * 有指向obj1的引用,那么obj1不会被回收
 */

const set = new Set();
const obj1 =  name: "obj1" ;
set.add(obj1);
obj1 = null;

/**
 * 对于WeakSet,对数据的引用是弱引用,在将obj2加入到weakSet中,weakSet就有指向obj2的引用,
 * 当obj2=null,weakSet在新版的ECMAScript中式存放在variable_中的,GC算法标记清除算法
 * 虽然还是存在对obj2的引用,但是因为weakSet是弱引用,就算有引用,也会被GC算法回收
 */
const weakSet = new WeakSet();
const obj2 =  name: "obj2" ;
weakSet.add(obj2);
obj2 = null;

es6--set和map数据结构

1.Set和WeakSet Set与数组相似,但是Set结构的成员必须是唯一的.WeakSet与对象类型,但是WeakSet结构的成员只能是对象 Set结构的实例属性和方法  属性:    Set.prototype.constructor:构造函数    Set.prototype.size:返回Set实... 查看详情

es6中的set和map

Set是一种叫做集合的数据结构Map是一种叫做字典的数据结构应用场景:数据去重和数据存储集合是由一组无序且唯一的项组成的,可以想象成集合是一个既没有重复元素,也没有顺序概念的数组ES6提供了新的数据结构Set,类似于... 查看详情

es6的set和map数据结构(代码片段)

Set和Map数据结构SetWeakSetMapWeakMapSet § ?基本用法ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成Set数据结构。consts=newSet();[2,3,5,4,5,2,2].forEach(x=>s.add(... 查看详情

es6map&set(代码片段)

<scripttype="text/javascript">//map基本使用letmap=newMap();map.set(‘name‘,‘张三‘);map.set(‘age‘,11);map.set(‘已婚‘,false);console.log(map.get(‘name‘));console.log(map.get(‘age‘));console.log(map.get(‘已婚 查看详情

es6set和map数据结构

ES6提供了新的数据结构Set,它类似于数组,但是成员的值都是唯一的,没有重复的值。  Set本身是一个数据结构,用来生成Set数据结构。    consts=newSet();    [2,3,5,4,5,2,2,2].forEach(x=>s.add(x));    for(letiofs){    ... 查看详情

es6-set和map数据结构

Set基本用法ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成Set数据结构。consts=newSet();[2,3,5,4,5,2,2].forEach(x=>s.add(x));for(letiofs){console.log(i);}//2354上面代码通... 查看详情

es6中的set和map集合

...果需要使用非数值型索引,就会用非数组对象创建所需的数据结构,而这就是Set集合与Map集合的早期实现。本文将详细介绍ES6中的set和map集合 引入  Set集合是一种无重复元素的列表,开发者们一般不会逐一读取数组中的元... 查看详情

es6中的set和map集合

...果需要使用非数值型索引,就会用非数组对象创建所需的数据结构,而这就是Set集合与Map集合的早期实现。本文将详细介绍ES6中的set和map集合 引入  Set集合是一种无重复元素的列表,开发者们一般不会逐一读取数组中的元... 查看详情

es6-set和map数据结构(代码片段)

一、set1.set数据结构:类似数组,但是里面不能有重复值2.set语法,newSet([])letset=newSet([1,2,1]);console.log(set);// 1,23.set方法//add()增加,返回增加后的setconsole.log(set.add(3));// 1,2,3//delete()删除,返回true或falseconsole.l 查看详情

es6基础(set数据结构和map数据结构)

set数据结构:(每一项都不一样)API: add();delete();clear();has();size属性;letarr=["wowo","hh","web"];letsetArr=newSet(arr);console.log(setArr);//Set(3){"wowo","hh","web"}typeofsetArr//objectsetArr.add("呵呵哒");con 查看详情

es6学习笔记——set和map

SetES6提供的数据结构,类似于数组,但是成员的值都是唯一的。(提供了一种数组去重的方法)Set内部判断两个值是否相同使用的是‘Same-valueequality‘,类似于===但是NaN等于自身Set实例的属性和方法Set.prototype.constructor:构造函数,... 查看详情

es6之set数据结构和map数据结构iterator和for...of循环

ECMAScript6入门Set数据结构基本用法ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成Set数据结构。vars=newSet();[2,3,5,4,5,2,2].map(x=>s.add(x));for(letiofs){console.log(i);}... 查看详情

es6之set和map

1.setES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值,set本身就是构造函数,所以可以通过new的方式来创建对象1//例一可以做数组去重用2varset=newSet([1,2,3,4,4]);3[...set]4//[1,2,3,4]那么set内部是怎么... 查看详情

set和map的区别(@es6)(代码片段)

Set结构是类似于数组结构,但是成员都是不重复的值缺点是没办法像数组一样通过下标取值的方法.构造:letset=newSet([1,2,3]);set.size//3数组去重:letarr=[1,2,3,4,5,4,23,1,3];arr=Array.from(newSet(arr));//[1,2,3,4,5,23]Map结构是键值对集合(Hash结构)构... 查看详情

javascript--map&set(代码片段)

...)都可以作为一个键或一个值。Map是ES6中引入的一种新的数据结构1.1创建MapTypeScript使用Map类型和new关键字来创建Map:letmyMap=newMap();初始化Map,可以以数组的格式来传入键值对:letmyMap=n 查看详情

es6学习之set和map数据结构(代码片段)

Set对象ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set实例的属性和方法Set.prototype.constructor:构造函数,默认就是Set函数。Set.prototype.size:返回Set实例的成员总数Set.prototype.add(value):添... 查看详情

es6set容器和map容器

...value集合体,是一个构造函数1.可以去重2.add(value):添加数据3.delete(value):删除数据4.has(value):判断是否包含值,返回true/false5.clear(value):清空数据6.size():判断数据长度map容器:多个无序key不重复的keyvalue的集合体.相当于一个二维数组l... 查看详情

es6的新特性(12)——set和map数据结构(代码片段)

Set和Map数据结构Set基本用法ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成Set数据结构。consts=newSet();[2,3,5,4,5,2,2].forEach(x=>s.add(x));for(letiofs)console.log(i);//23... 查看详情