Javascript set结构 (去重)

javascript 的set结构用来去重非常方便,这里记录一下。

文章目录

  • 1 背景
  • 2 set数据结构
    • 2.1 set创建
    • 2.2 set 加入或删除key操作
    • 2.3 set转数组

1 背景

最近遇到问题,要记录某个人曾经用过的手机和操作系统记录到一个json

{
	"os":["android","ios"],
	"android":["mi8","p20"],
	"ios":["iphone8","iphonex"]
}

而每个手机的源数据格式是这样的:

{
	"os" :"android"
	"eq":"mi8"
}

这里不希望记录进去重复的型号和重复的操作系统。
用数组自己去判断是否重复太过于复杂,这里就记得曾经了解过JavaScript中有set数据结构。

2 set数据结构

Set是一种类似于Map的数据结构,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key,这种特性就起到数据去重的效果,重复的数据不会被写入到set中。

2.1 set创建

let sets = new Set();//创建一个空的SET                              Set {}
let sets1 = new Set([1,2,3,4]);//可以传入数组-数组转set     Set { 1, 2, 3, 4 }
let sets2 = new Set([1,2,2,4]);//重复数据不会添加到set中  Set { 1, 2, 4 }

可以利用构造函数可以传入数组的特性,用来给数组去重。即第三种示例。
TODO:但这里没有考虑性能问题,比如较大的数组用这种方式去重会有什么结果。

2.2 set 加入或删除key操作

Set 提供了add 和delete方法

sets.add(1,2,5);//Set { 1 }    只能加入第一个
sets.add(5);//Set { 1, 5 }      加入一个key(5)
sets.add(5);//Set { 1, 5 }      重复加入无效
sets.delete(1);//Set { 5 }      删除一个key(5)
sets.delete(1);//Set { 5 }      重复删除无效

2.3 set转数组

let array = Array.from(sets1);//[ 1, 2, 3, 4 ] 使用Array 提供的from方法
msgId = Array.from(new Set(msgId));//数组去重

你可能感兴趣的:(javascript,nodejs)