ES6 Set 数据类型

mac2024-10-15  52

定义:Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。

语法:

new Set([iterable]);

参数: iterable 如果传递一个可迭代对象,它的所有元素将不重复地被添加到新的 Set中。如果不指定此参数或其值为null,则新的 Set为空。 返回值 一个新的Set对象。

set对象是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即 Set 中的元素是唯一的。

{ let list = new Set(); list.add(5); list.add(7); //获取list的元素数量 //size类似数组的length console.log('size',list.size); //size 2 console.log('set-list',list); //{5, 7} } { let arr = [1,2,3,4,5]; let list = new Set(arr); console.log('size',list.size); //size 5 console.log('set-list',list); //{1, 2, 3, 4, 5} } { let obj = {a:2,b:3}; let list = new Set(); list.add(obj); obj['a'] = 4; //修改 console.log('set-list-obj',list); //{{[{a:4,b:3}]}} } { let list = new Set(); list.add(1); list.add(2); list.add(1); //set添加重复元素不会报错,但不生效 ——应用:数组去重 console.log('list',list); //{1, 2} let arr = [1,2,3,1,2,4]; let list2 = new Set(arr); //将数组重复的元素过滤! console.log('unique',list2); //{1, 2, 3, 4} //set不做数据类型转换,2和'2'数据类型不一样 let arr1 = [1,2,3,1,'2',4]; let list3 = new Set(arr1); console.log('unique',list3); //{1, 2, 3,'2', 4} }

set实例的方法

//set实例的方法 { let arr = ['add','delete','clear','has']; let list = new Set(arr); //has 判断set中有没有指定的元素 console.log('has',list.has('add')); //true //delete 删除指定的元素 console.log('delete',list.delete('add'),list); //true {"delete", "clear", "has"} //clear 清空整个set list.clear(); console.log('list',list); // {} }

set 遍历 set是一组key的集合 但不存储vaule,遍历处理的key和value是一样的 在Set中,没有重复的key。

//set 遍历 set是一组key的集合 但不存储vaule,遍历处理的key和value是一样的 在Set中,没有重复的key。 { let arr = ['add','delete','clear','has',{last:2}]; let list = new Set(arr); console.log('set-list',list); //{"add", "delete", "clear", "has", {…}} for(let key of list.keys()){ console.log('keys',key); //value add, value delete, value clear, value has, keys {last: 2} } for(let value of list.values()){ console.log('value',value); //value add, value delete, value clear, value has, value {last: 2} } for(let [key,value] of list.entries()){ //这里可以看出set中的key和value是一样的 console.log('entries',key,value); //entries add add, entries delete delete, entries clear clear, entries has has, entries {last: 2} {last: 2} } list.forEach(function(item){ console.log(item); //add delete clear has {last: 2} }) }

set应用

数组去重 //数组去重 { let arr = [2,3,4,4,2,3,3,4,4,5,5,6,6,7,5,32,3,4,5]; let list = new Set(arr); console.log(list); //{2, 3, 4, 5, 6, 7, 32} } { console.log(new Set([2,3,4,4,2,3,3,4,4,5,5,6,6,7,5,32,3,4,5])); //{2, 3, 4, 5, 6, 7, 32} } //转化为Array { const numbers = [2,3,4,4,2,3,3,4,4,5,5,6,6,7,5,32,3,4,5]; console.log([...new Set(numbers)]); //[2, 3, 4, 5, 6, 7, 32] } 交集 并集 差集 //intersect可以通过 { let set1 = new Set([1,2,3,4,5,6,7,8]); let set2 = new Set(['a','b','c',1,2,3,4]); var intersection = new Set([...set1].filter(x => set2.has(x))); //使用[...]扩展运算符将对象转化为数组 var intersectionArray = [...new Set([...set1].filter(x => set2.has(x)))]; // difference不通过 var difference = new Set([...set1].filter(x => !set2.has(x))); //使用[...]扩展运算符将对象转化为数组 var differenceArray = [...new Set([...set1].filter(x => !set2.has(x)))]; console.log('交集',intersection); //{1, 2, 3, 4} console.log('交集-数组形式',intersectionArray); //[1, 2, 3, 4] console.log('差集',difference); //{5, 6, 7, 8} console.log('差集-数组形式',differenceArray); //[5, 6, 7, 8] } { var a = new Set([1, 2, 3]); var b = new Set([4, 3, 2]); var union = new Set([...a, ...b]); // {1, 2, 3, 4} 并集 } Array相关 { var myArray = ["value1", "value2", "value3"]; // 用Set构造器将Array转换为Set var mySet = new Set(myArray); console.log(mySet.has("value1")); // returns true // 用...(展开操作符)操作符将Set转换为Array console.log([...mySet]); // 与myArray完全一致 } String相关 { var text = 'Indiana'; var mySet = new Set(text); // Set {'I', 'n', 'd', 'i', 'a'} console.log(mySet.size); // 5 }

WeakSet对象与Set对象的区别

//WeakSet对象与Set对象的区别 //1. weakset的数据类型只支持对象,weakset的对象是弱引用 //2. set的一些属性和方法weakset是没有的 { let weakList = new WeakSet(); let arg = {a:'1',b:'2'}; weakList.add(arg); //weakset的数据类型只支持对象!! // WeakSet.clear(); 报错 没有该方法 // weakList.add(2); //报错 //weakset不支持 clear()方法 没有 sizes属性 不能遍历!! console.log('weakList',weakList); //weakList WeakSet {Object {}} }
最新回复(0)