es6----setmap应用场景(代码片段)

sexintercourse sexintercourse     2023-04-21     120

关键词:

1.数组去重

2.字符串去重

属性:

  • Set.prototype.size:返回Set实例的成员总数。

Set 实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)。下面先介绍四个操作方法。

  • add(value):添加某个值,返回 Set 结构本身。
  • delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
  • has(value):返回一个布尔值,表示该值是否为Set的成员。
  • clear():清除所有成员,没有返回值。

 

 

遍历操作

Set 结构的实例有四个遍历方法,可以用于遍历成员。

  • keys():返回键名的遍历器
  • values():返回键值的遍历器
  • entries():返回键值对的遍历器
  • forEach():使用回调函数遍历每个成员

需要特别指出的是,Set的遍历顺序就是插入顺序。这个特性有时非常有用,比如使用 Set 保存一个回调函数列表,调用时就能保证按照添加顺序调用。

(1)keys()values()entries()

keys方法、values方法、entries方法返回的都是遍历器对象

 

 

(2)forEach()

 

Map 对象

Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。

 

Map方法

技术图片
var myMap = new Map();
myMap.set("bar", "baz");
myMap.set(1, "foo");

myMap.size;       // 2
myMap.has("bar"); // true

myMap.clear();

myMap.size;       // 0
myMap.has("bar")  // false
技术图片

 

使用for..of方法遍历

技术图片
var myMap = new Map();
myMap.set(0, "zero");
myMap.set(1, "one");
for (var [key, value] of myMap) 
  console.log(key + " = " + value);

// 将会显示两个log。一个是"0 = zero"另一个是"1 = one"

for (var key of myMap.keys()) 
  console.log(key);

// 将会显示两个log。 一个是 "0" 另一个是 "1"

for (var value of myMap.values()) 
  console.log(value);

// 将会显示两个log。 一个是 "zero" 另一个是 "one"

for (var [key, value] of myMap.entries()) 
  console.log(key + " = " + value);

// 将会显示两个log。 一个是 "0 = zero" 另一个是 "1 = one"
技术图片

 

使用forEach()方法迭代映射

myMap.forEach(function(value, key) 
  console.log(key + " = " + value);
, myMap)
// 将会显示两个logs。 一个是 "0 = zero" 另一个是 "1 = one"
Set 对象

 

Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。

Set 对象方法

技术图片
var mySet = new Set();
mySet.add(1);
mySet.add("foo");

mySet.size;       // 2
mySet.has("foo"); // true

mySet.clear();

mySet.size;       // 0
mySet.has("bar")  // false
技术图片

 

迭代Set对象

技术图片
// 迭代整个set
// 按顺序输出:1, "some text" 
for (let item of mySet) console.log(item);

// 按顺序输出:1, "some text" 
for (let item of mySet.keys()) console.log(item);

// 按顺序输出:1, "some text" 
for (let item of mySet.values()) console.log(item);

// 按顺序输出:1, "some text" 
//(键与值相等)
for (let [key, value] of mySet.entries()) console.log(key);

// 转换Set为Array (with Array comprehensions)
var myArr = [v for (v of mySet)]; // [1, "some text"]
// 替代方案(with Array.from)
var myArr = Array.from(mySet); // [1, "some text"]

// 如果在HTML文档中工作,也可以:
mySet.add(document.body);
mySet.has(document.querySelector("body")); // true

// Set和Array互换
mySet2 = new Set([1,2,3,4]);
mySet2.size; // 4
[...mySet2]; // [1,2,3,4]

// 用forEach迭代
mySet.forEach(function(value) 
  console.log(value);
);
技术图片

 

Set 与 Array 的联系

技术图片
var myArray = ["value1", "value2", "value3"];

// 用Set构造器将Array转换为Set
var mySet = new Set(myArray);

mySet.has("value1"); // returns true

// 用...(展开操作符)操作符将Set转换为Array
console.log([...mySet]); // 与myArray完全一致
技术图片

 

...扩展语句

技术图片
扩展语法允许一个表达式在期望多个参数(用于函数调用)或多个元素(用于数组字面量)或多个变量(用于解构赋值)的位置扩展。

let arr1 = [0, 1, 2];
let arr2 = [3, 4, 5];

arr1 = [...arr2, ...arr1]; 

console.log(arr1) // [3, 4, 5, 0, 1, 2]
技术图片

 

应用一:Set对象数组去重

技术图片
var arr=[3, 62, 3, 38, 20, 42, 14, 5, 38, 29, 42];
console.log(new Set(arr))
可以封装一个函数

function uniqueArray(arr)
    return Array.from(new Set(arr));

用这个函数可以数组去重。

或者如下写也可以,比较简单的数组去重

[...new Set([1,3,4,5,1,2,3,3,4,8,90,3,0,5,4,0])]
技术图片

 

curator场景应用(代码片段)

分布式锁功能:在分布式场景中,我们为了保证数据的一致性,经常在程序运行的某一个点,需要进行同步操作,(java提供synchronized或者Reentrantlock实现),使用curator基于zookeeper的特性提供的分布式锁来处理分布式场景的数据一致... 查看详情

redis应用场景汇总(代码片段)

...持的多种数据类型也非常有用,能覆盖系统开发中的很多应用场景。下面列举的场景有的是从网上其他人的博客里看到的,有的自己开发时尝试过的一些解决方案后记录下来的,希望能给以后的开发带来启发。在说应用场景前先... 查看详情

zookeeper—应用场景(代码片段)

...性,使得ZooKeeper解决很多分布式问题。本文介绍zk的应用场景。zk并非天生就是为这些应用场景设计的,都是后来众多开发者根据其框架的特性,利用其提供的一系列API接口&# 查看详情

this的应用场景(代码片段)

作为对象方法调用this作为对象的属性调用时,this指向该对象this作为对象的属性被赋值给一个新的变量时,this指向windowvarobj=x:"li",fortuneteller:function()console.log(this);obj.fortuneteller()//指向objvary=obj.fortunetellery()//window作为构造函数调用... 查看详情

基于redis消息的订阅发布应用场景(代码片段)

原文:基于Redis消息的订阅发布应用场景目录基于Redis消息的订阅发布应用场景1.应用背景2.困境2.1锁表风险2.2实时性差2.3增加编程复杂性2.4实时效果3.解决方案3.1前端传值给服务端3.2服务端通过消息传给采集控制端4.详细代码设计4.... 查看详情

iframe的一种应用场景(代码片段)

场景:在页面中用表单Post提交一个请求,该请求会根据提交数据返回页面,该页面通过iframe展示在当前页面上,html代码:<divclass="btn-area"><formid="credit_form"class="info-msg"name="form"method="post"action="../../handler/pingpong/getpingpongdata 查看详情

java内部类的应用场景(代码片段)

场景一:   jdk中动态代理原理:packagedynamic.proxy;importjava.lang.reflect.InvocationHandler;importjava.lang.reflect.Method;importjava.lang.reflect.Proxy;/***实现自己的InvocationHandler*@authorzyb*&# 查看详情

策略模式应用场景(代码片段)

有个大神写的很好:参考:设计模式学习笔记(四:策略模式)参考:设计模式学习笔记(二:观察者模式)参考:设计模式学习笔记-代理模式一、策略模式: (1)解决场景:某个功能有多个方案可以实现,要达到某个目的... 查看详情

云网一体化场景中的sdn应用(代码片段)

...主打解决方案,可见其对SDN的理论研究已经非常成熟,SDN应用分为2个层面,云网一体化场景和网络虚拟化场景,其中网络虚拟化场景是又包括计算联动场景和机架出租场景。说到SDN就不得不提虚拟化,为了使得数据中心资源池... 查看详情

zookeeper典型应用场景介绍(代码片段)

...关于Zookeeper的基础知识,Zookeeper作为一种协调分布式应用高性能的调度服务,实际的应用场景也非常的广泛,这里主要通过几个例子来具体的说明Zookeep 查看详情

zookeeper的典型应用场景(代码片段)

...践》读书笔记本文:总结脑图地址:脑图前言所有的典型应用场景,都是利用了ZK的如下特性:强一致性:在高并发情况下,能够保证节点的创建一定是全局唯一的。Watcher机制和异步通知:可以对指定节点加上监听,当节点变更... 查看详情

归并排序及其应用场景(代码片段)

...排序的概念二、归并排序递归与非递归实现三、归并排序应用场景四、归并排序总结一、归并排序的概念二、归并排序递归与非递归实现归并排序递归实现,分治为每个区间元素都有序,那么就得把区间分治成为1才能保... 查看详情

zookeeper应用场景(代码片段)

...eper是一个分布式服务框架,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:命名服务、状态同步、配置中心、集群管理等。一、命名服务命名服务是分布式系统中比较常见的一类场景。命名服务... 查看详情

乐观锁应用场景与实现(代码片段)

场景主要适用场景:当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新乐观锁实现方式:取出记录时,获取当前version更新时,带上这个version执行更新时,setve... 查看详情

什么是反射?以及应用场景?(代码片段)

  对编程语言比较熟悉的朋友,应该知道“反射”这个机制。Python作为一门动态语言,当然不会缺少这一重要功能。然而,在网络上却很少见到有详细或者深刻的剖析论文。下面结合一个web路由的实例来阐述python的反射机制的... 查看详情

zookeeper最典型的应用场景(理论+实战)(代码片段)

...关于Zookeeper的基础知识,Zookeeper作为一种协调分布式应用高性能的调度服务,实际的应用场景也非常的广泛,这里主要通过几个例子来具体的说明Zookeeper在特定场景下的使用方式(下面的这些功能估计consul和etcd也... 查看详情

kafka简介与应用场景(代码片段)

kafka简介与应用场景(一)标签(空格分隔):kafka系列一:kafka的简介:1.1kafka的简介Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。这种动作(网页浏览,搜索和其他用户... 查看详情

场景应用:自己设计一个本地缓存(代码实现)(代码片段)

文章目录设计思想1.数据结构2.对象上限3.清除策略4.过期时间5.线程安全6.简明的接口7.是否持久化8.阻塞机制实现方案1.数据结构2.对象上限3.清除策略4.过期时间5.线程安全6.简明的接口7.是否持久化8.阻塞机制代码实战缓存元素Cach... 查看详情