数组去重

let arr = [ 1,2,3,4,5,3,2 ]
// 数组去重
// 方法一
let newArr = [new Set(arr)]
console.log(newArr);
// 方法二
let newArr2 = Array.from(new Set(arr))
console.log(newArr2);

数组对象去重

let obj = [
{id : 1 ,name : 'zs'},
{id : 2 ,name : 'ls'},
{id : 3 ,name : 'ww'},
{id : 2 ,name : 'ls'}
] // 数组对象去重
let newObj = [...new Set(obj.map(el=> JSON.stringify(el)))].map(res=> JSON.parse(res))
console.log(newObj);
// 步骤拆解:
/*
1、判断两个基本数据类型是否相同,比较的是数据的值。判断两个引用类型是否一样,比较的是引用
2、set无法将数组对象去重,set去重的原理主要是判断两者存储的单元位置是否一样,如果一样才能去重。
3、基本类型数据存储在栈,值相同就直接去重。引用数据类型存储在堆,引用类型数据 值 相同 位置不相同也无法去重。参考第一条的解释。
4、只要将引用类型数据转变成基本数据类型,基本数据类型直接比较就可以去重了。去重完成后通过字符串转json对象即可。
*/
/*
[...new Set(obj.map(el=> JSON.stringify(el)))] 这一步 map 将内部的每一条转换成字符串,返回一个新数组,也就是引用类型数据转基本类型数据,下面是转换结果
[
0: "{\"id\":1,\"name\":\"zs\"}" // 字符串
1: "{\"id\":2,\"name\":\"ls\"}" // 字符串
]
.map(res=> JSON.parse(res)) 这一步将去重处理好的值转换为对象 得到最终结果
*/

数组添加

let arr3 = [
{id : 1 ,name : 'zs'},
{id : 2 ,name : 'ls'},
{id : 3 ,name : 'ww'}
] let newArr3 = new Set(arr3)
// 尾部添加
newArr3.add({id : 4,name : 'swk'})
console.log('尾部添加');
console.log(newArr3);

数组删除

let arr4 = [1,2,3,4,5,4,4,4]
let newArr4 = new Set(arr4)
newArr4.delete(2) // 删除成功返回:true 删除失败返回:false
console.log('删除数组中某一项');
console.log(newArr4);

检测数组值是否存在

let arr5 = [1,2,3,4,5,6,7]
let newArr5 = new Set(arr5)
console.log('检测数组中是存在set值');
console.log(newArr5.has(5));// 存在返回true,不存在返回false

清除数组所有的值

let arr6 = [1,2,3,4,5]
let nweArr6 = new Set(arr6)
nweArr6.clear() // 清除数组中所有值,没有返回值
console.log('清除数组中所有值');
console.log(nweArr6);

数组长度

let arr7 = [1,2,3,4,5]
let newArr7 = new Set(arr7)
console.log('获取数组的长度 & size 从1开始');
console.log(newArr7.size);

数组遍历方法


// 这几个与es6的遍历方法一致
Set.prototype.keys() //—— 返回键名的遍历器
Set.prototype.values() // —— 返回键值的遍历器
Set.prototype.entries() // —— 返回键值对的遍历器
Set.prototype.forEach() // —— 使用回调函数遍历元素
// 由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),
// 所以 keys 方法和 values 方法的行为完全一致

ES6的Set详解的更多相关文章

  1. JavaScript ES6 新特性详解

    JavaScript ES6 带来了新的语法和新的强大功能,使您的代码更现代,更易读 const ,  let and var 的区别: const , let 是 ES6 中用于声明变量的新关键字. ...

  2. es6入门4--promise详解

    可以说每个前端开发者都无法避免解决异步问题,尤其是当处理了某个异步调用A后,又要紧接着处理其它逻辑,而最直观的做法就是通过回调函数(当然事件派发也可以)处理,比如: 请求A(function (请求响 ...

  3. Es6 Promise 用法详解

     Promise是什么??    打印出来看看  console.dir(Promise) 这么一看就明白了,Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方 ...

  4. es6的基本数据详解

    一.Set 基本用法:   1)ES6提供了新的数据机构-Set. 它类似于数组,但是成员的值都是唯一的,没有重复的值.Set本身是一个构造函数,用来生成Set数据结构. 先来看一段最简单的代码: 1 ...

  5. es6 Proxy对象详解

    Proxy用于修改某些操作的默认行为,也可以理解为在目标对象之前架设一层拦截,外部所有的访问都必须先通过这层拦截,因此提供了一种机制,可以对外部的访问进行过滤和修改.这个词的原理为代理,在这里可以表示 ...

  6. es6 Reflect对象详解

    Reflect是ES6为操作对象而提供的新API,而这个API设计的目的只要有: 将Object对象的一些属于语言内部的方法放到Reflect对象上,从Reflect上能拿到语言内部的方法.如:Obj ...

  7. es6实现继承详解

    ES6中通过class关键字,定义类 class Parent { constructor(name,age){ this.name = name; this.age = age; } speakSo ...

  8. ES6 中 Promise 详解

    Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息.Promise 提供统一的 API ...

  9. ES6中Promise详解

    Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息. Promise 提供统一的 AP ...

  10. ES6 Promise用法详解

    What is Promise? Promise是一个构造函数,接受一个参数(Function),并且该参数接受两个参数resolve和reject(分别表示异步操作执行成功后的回调函数.执行失败后的 ...

随机推荐

  1. 禁用显卡自动更新(解决官办驱动和OEM驱动相冲)

    起因 有一天打开MC(我的世界)时候突然显示显卡不支持,想了想可能是自己捣鼓电脑的时候弄坏了,提示说版本不支持,一看自己的驱动还是上古版本,但是之前都是可以正常玩的,想着更新下驱动就行了呗,更新完&q ...

  2. 图扑 Web SCADA 零代码组态水泥生产工艺流程 HMI

    前言 水泥是建筑工业三大基本材料之一,素有"建筑工业的粮食"之称.2022 年 1-9 月水泥产量为 15.63 亿吨,生产方法包括新型干法.立窑.湿窑.干法中空窑和立波尔窑等. ...

  3. 锂电池3.7V转3V,1.5V的稳压和降压芯片

    3.7V是常规我们知道的锂电池多,一般锂电池的放电电压是3V-4.2V之间,再降压转3V,1.5V的话,不需要担心升降压等其他问题,不像输出3.3V时,可能要考虑到升降压芯片的问题了,升降压芯片可考虑 ...

  4. MySQL 性能压测工具-sysbench,从入门到自定义测试项

    sysbench是一个开源的.基于LuaJIT(LuaJIT 是 Lua 的即时编译器,可将代码直接翻译成机器码,性能比原生 lua 要高) 的.可自定义脚本的多线程基准测试工具,也是目前用得最多的 ...

  5. aiohttp、asyncio使用协程增加爬虫效率

    import aiohttp import asyncio import time async def get_requests(url): async with aiohttp.ClientSess ...

  6. 大数据-业务数据采集-FlinkCDC

    CDC CDC 是 Change Data Capture(变更数据获取)的简称.核心思想是,监测并捕获数据库的变动(包括数据或数据表的插入.更新以及删除等),将这些变更按发生的顺序完整记录下来,写入 ...

  7. Django视图层/FBV与CBV/jsonResponse对象/form表单上传文件/request对象获取文件

    目录 虚拟环境 视图层views 三板斧 jsonResponse对象 form如何上传文件/request对象获取文件 request对象方法 FBV与CBV CBV源码解析 虚拟环境 每创建一个虚 ...

  8. 微服务系列之服务监控 Prometheus与Grafana

    1.为什么需要监控服务   监控服务的所属服务器硬件(如cpu,内存,磁盘I/O等)指标.服务本身的(如gc频率.线程池大小.锁争用情况.请求.响应.自定义业务指标),对于以前的小型单体服务来说,确实 ...

  9. JavaScript:七大基础数据类型:字符串string

    在JS中,字符串类型的数据,有三种表达方式,但是无一例外都是需要引号扩起来的: 单引号'hello' 双引号"hello" 反引号`hello` 注意: 因为JS没有字符类型,这一 ...

  10. Triple 协议支持 Java 异常回传的设计与实现

    作者:Apache Dubbo Contributor 陈景明 背景 在一些业务场景, 往往需要自定义异常来满足特定的业务, 主流用法是在catch里抛出异常, 例如: public void dea ...