前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ES6- Set-2之去重—并集—交集—差集

ES6- Set-2之去重—并集—交集—差集

作者头像
envoke
发布2020-09-17 11:25:55
7770
发布2020-09-17 11:25:55
举报

ES6-Set -2 常规用法

单个数组去重

  • 我们先来看一下再ES5中。我们数组去重的方法
代码语言:javascript
复制
	let arr = [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1];
	let obj = {};
	let newArr = [];
	for(var i = 0; i < arr.length; i++){
		if(!obj[arr[i]]){
			newArr.push(arr[i]);
			obj[arr[i]] = true;
		}
	}
在这里插入图片描述
在这里插入图片描述
  • 我们再来看一下使用Set的方式来去重
代码语言:javascript
复制
	let arr = [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1];
	let oS = new Set(arr);
	console.log([...oS]);

也同样达到了去重的效果,代码上简单了不少

在这里插入图片描述
在这里插入图片描述

刚才是在常规的情况下,但是数组中出现了对象,这个去重可能就跪了 我们来看一下

代码语言:javascript
复制
	let o = {
	    name: "zhangsan"
	}
	let arr = [1, 2, 3, 4,o, 5, 6, 5, 4, o,3, 2, 1, {name: "gg"}];
	let obj = {
	
	}
	let newArr = [];
	for(var i = 0; i < arr.length; i++){
	    if(!obj[arr[i]]){
	        newArr.push(arr[i]);
	        obj[arr[i]] = true;
	    }
	}
	console.log(newArr);

这个情况有点出乎意料

在这里插入图片描述
在这里插入图片描述

我们先来看一下下面这个小例子,o是一个对象

  • 在o上添加一个key为[](此处的属性名是数组),并为[]赋值20;
  • 打印o,我们看到的是[object object]:20。 原因是什么呢? 其实是当我们的key为数组时会默认调用原型链顶端Object的prototype上的toString方法, 返回的是对象类型,所以看到的时刚才的效果
  • 我们把对象给改了,但是看到的效果还是不变,因为返回的键把先前的覆盖了
在这里插入图片描述
在这里插入图片描述

这也就是刚刚才数组去重失效的原因

如何实现并集

代码语言:javascript
复制
首先解释一下什么是并集:举一个例子,我把我有的东西和你有的东西放到一起,并且把重复的去掉,这就是并集
代码语言:javascript
复制
	let arr1 = [1, 2, 3, 4, 2, 1];
	let arr2 = [3, 4, 5, 6, 6, 7];
	let newArr = new Set([...arr1, ...arr2]);
	console.log(newArr);

达到去重的效果

在这里插入图片描述
在这里插入图片描述

如何实现交集

代码语言:javascript
复制
什么是交集呢? 把我和你都有的东西都放到一起,再去掉重复的,即为交集

此处使用的是ES6箭头函数的简写方法,如果不懂的,可以去查一下箭头函数,之后会更新上

代码语言:javascript
复制
	let arr1 = [1, 2, 3, 4, 2, 1];
	let arr2 = [3, 4, 5, 6, 6, 7];
	let oS1 = new Set(arr1);
	let oS2 = new Set(arr2);
	//调用数组的filter方法,符合条件的返回
	//再根据Set提供的has方法,判断是否相同的
	let newArr = [...oS1].filter(ele => oS2.has(ele));
  • 先将oS1转化数组才能调用filter方法
  • 调用数组的filter方法,符合条件的返回
  • Set提供的has方法,判断是否相同的
  • 返回满足条件的成为新数组
在这里插入图片描述
在这里插入图片描述

如何实现差集

代码语言:javascript
复制
差集的定义为:把我在你哪里没有的和你再我这里没有的东西放到一起,再去掉重复的即可;
代码语言:javascript
复制
	let arr1 = [1, 2, 3, 4, 2, 1];
	let arr2 = [3, 4, 5, 6, 6, 7];
	let oS1 = new Set(arr1);
	let oS2 = new Set(arr2);
	let newArr1 = [...oS1].filter(ele => !oS2.has(ele));
	let newArr2 = [...oS2].filter(ele => !oS1.has(ele));
	console.log([...newArr1, ...newArr2]);
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-04-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ES6-Set -2 常规用法
  • 单个数组去重
  • 如何实现并集
  • 如何实现交集
  • 如何实现差集
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档