数组去重

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 方法的行为完全一致

最新文章

  1. (转)Android消息处理机制(Handler、Looper、MessageQueue与Message)
  2. 【转】升级Xcode6.3插件失效解决办法
  3. sql 联合查询并更新
  4. Java 8 VM GC Tunning Guide Charter 5
  5. 【解决】U盘装系统(Win7/Win8)& 装双系统
  6. Nginx + Tomcat 动静分离实现负载均衡
  7. JavaScript 浮点数运算 精度问题
  8. asp.net程序中如何使用皮肤更换的小功能
  9. this指针与function变量--this究竟指向哪里?
  10. Python-数据库支持
  11. mac下sublime 配置查看源码
  12. AtCoder Beginner Contest 068
  13. Spark之谓词下推
  14. 从Scratch到Python之角色与造型
  15. Python 之 type方法创建类
  16. JQuery POST请求封装
  17. [UOJ282]长度测量鸡
  18. Python基础教程 - Tdcqma
  19. phpstorm10使用服务激活
  20. spring读取properties的几种方式

热门文章

  1. uniapp 实现小程序中自定义tabBar 的方法
  2. 初学RNN
  3. python3获取列表逆序的五种方式
  4. ArcObjects SDK开发 011 RasterLayer
  5. 盘点JAVA中基于CAS实现的原子类, 你知道哪些?
  6. 像go 一样 打造.NET 单文件应用程序的编译器项目bflat 发布 7.0版本
  7. Qt多线程开发总览,既然用到了就记录一下
  8. 一个简单的rust字符串时钟
  9. day05-Vue02
  10. 【大型软件开发】浅谈大型Qt软件开发(二)面向未来开发——来自未来的技术:COM组件。我如何做到让我们的教学模块像插件一样即插即用,以及为什么这么做。