JS的复杂类型常见的就是Map,Object,Array,对于Set类型的数据是比较少见的。
- Set的定义?
Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用,Set对象是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即 Set 中的元素是唯一的。
- 创建Set数据结构?
在ES6之后新增的set数据可以直接通过new去创建。
const set = new Set();
3.Set数据的应用
场景1:数组对象去重。
对于数组对象去重,由于数组的每一个元素都是对象,无法直接使用== 去进行判断,所以可以将数组对象转换成JSON字符串。
let objarr = [
{ name: 1, sex: 1 },
{ name: 2, sex: 1 },
{ name: 3, sex: 1 },
]; // 创建数组
let resArr = []
let tempArr = objarr.map(item=>JSON.stringify(item))//将数组的每一个元素转换成JSON数据
tempArr = [...new Set(tempArr)] //利用set 的属性去重
temp.forEach((item: any) => {
resArr.push(JSON.parse(item));
}); //将JSON字符串转换成对象
4.set的基础属性
const set = new Set()
//往set添加元素
set.add(1)
//判断set是否包含某个属性
set.has(1) // 返回true 或 false
//删除set的属性
set.delete(1)
利用set的这些属性可以实现俩个数组对象之间的交集,并集以及差集。
数组对象还是要先转换成JSON数据后再进行操作,如果你的数组是常规数组,则可省略该步骤。
function getSameItem(arr1: any, arr2: any, type: string) {
let set_1 = new Set();
let set_2 = new Set();
let temp_1: any = [];
let temp_2: any = [];
arr1.forEach((item) => {
temp_1.push(JSON.stringify(item));
});
arr2.forEach((item) => {
temp_2.push(JSON.stringify(item));
});
temp_2.map((item) => {
set_2.add(item);
});
// 并集
if (type == "union")
return [...new Set([...temp_2, ...temp_1])].map((item) =>
JSON.parse(item)
);
//交集
if (type == "intersect")
return [...new Set([...temp_1].filter((x) => set_2.has(x)))].map(
(item) => JSON.parse(item)
);
if (type == "difference")
return [...new Set([...temp_1].filter((x) => !set_2.has(x)))].map(
(item) => JSON.parse(item)
);
}
},