ES6的Set详解
数组去重
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详解的更多相关文章
- JavaScript ES6 新特性详解
JavaScript ES6 带来了新的语法和新的强大功能,使您的代码更现代,更易读 const , let and var 的区别: const , let 是 ES6 中用于声明变量的新关键字. ...
- es6入门4--promise详解
可以说每个前端开发者都无法避免解决异步问题,尤其是当处理了某个异步调用A后,又要紧接着处理其它逻辑,而最直观的做法就是通过回调函数(当然事件派发也可以)处理,比如: 请求A(function (请求响 ...
- Es6 Promise 用法详解
Promise是什么?? 打印出来看看 console.dir(Promise) 这么一看就明白了,Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方 ...
- es6的基本数据详解
一.Set 基本用法: 1)ES6提供了新的数据机构-Set. 它类似于数组,但是成员的值都是唯一的,没有重复的值.Set本身是一个构造函数,用来生成Set数据结构. 先来看一段最简单的代码: 1 ...
- es6 Proxy对象详解
Proxy用于修改某些操作的默认行为,也可以理解为在目标对象之前架设一层拦截,外部所有的访问都必须先通过这层拦截,因此提供了一种机制,可以对外部的访问进行过滤和修改.这个词的原理为代理,在这里可以表示 ...
- es6 Reflect对象详解
Reflect是ES6为操作对象而提供的新API,而这个API设计的目的只要有: 将Object对象的一些属于语言内部的方法放到Reflect对象上,从Reflect上能拿到语言内部的方法.如:Obj ...
- es6实现继承详解
ES6中通过class关键字,定义类 class Parent { constructor(name,age){ this.name = name; this.age = age; } speakSo ...
- ES6 中 Promise 详解
Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息.Promise 提供统一的 API ...
- ES6中Promise详解
Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息. Promise 提供统一的 AP ...
- ES6 Promise用法详解
What is Promise? Promise是一个构造函数,接受一个参数(Function),并且该参数接受两个参数resolve和reject(分别表示异步操作执行成功后的回调函数.执行失败后的 ...
随机推荐
- i春秋123
打开是个普普通通的登录窗口,下尝试根据提示12341234进行输入,发现不正确...可能1234是指步骤,然后查看源码 发现了绿色的提示信息,我们就根据提示试试打开user.php 打开是白板网页,源 ...
- AI赋能音乐创作,人人都是音视频创作者
华为HMS Core音频编辑服务(Audio Editor Kit)依托自身AI技术的研发优势,上线全新的歌声合成音色及伴奏,给音视频创作者提供更多的创作可能.在短视频场景中,用户自定义歌词的歌声结合 ...
- 关于python转义字符在正则匹配中的问题研究
问题 首先看一个问题: import re text = r"\学" print(text) zz = r"\学" result = re.findall(zz ...
- py周结04
py周结04 异常类型,理语法结构及实践案例 1.异常类型 SyntaxError 语法错误 NameError 名字错误 IndexError 指数错误 KeyError 关键字错误 Indenta ...
- 使用VMware安装Linux(CentOS)操作系统
使用VMware安装CentOS 6.4 环境:Windows7 , VMware Workstation10, CentOS6.4 为什么选择CentOS ? 主流: 目前的Linux操作系统主要应 ...
- week_9(推荐系统)
Andrew Ng 机器学习笔记 ---By Orangestar Week_9(推荐系统) 1. Problem Formulation 这节就仅仅简单地介绍了一下 推荐系统的应用和实例.完全可以略 ...
- day10-功能实现09
家居网购项目实现09 以下皆为部分代码,详见 https://github.com/liyuelian/furniture_mall.git 21.功能20-修改购物车 21.1需求分析/图解 进入购 ...
- Codeforces Round #842 (Div. 2) A-D
比赛链接 A 题意 给一个数 \(k\) 找到最大的 \(x\) ,满足 \(1 \leq x < k\) 且 \(x!+(x-1)!\) 是 \(k\) 的倍数. 题解 知识点:数学. 猜测 ...
- &#127538;Eclipse通过jdbc连接数据库制作简单登陆界面【新手必看】
一.前言: 做网站开发,要求有多种搭配方式,前台技术可以使用PHP.ASP.JSP.ASP.NET.CGI等任何一种: 需要用到的基础语言用的最多的就是HTML/CSS.JS.JAVA.XML这些了, ...
- yarn使用 以及和npm对比
yarn是facebook发布的一款取代npm的包管理工具. yarn的特点: 速度超快. Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载. 同时利用并行下载以最大化资源利用率,因此安装速 ...