当前位置:网站首页>关于new Set( )还有哪些是你不知道的
关于new Set( )还有哪些是你不知道的
2022-07-01 18:54:00 【Fx_cap】
1、Set 特点:
Set对象是值的集合,可以按照插入的顺序迭代它的元素- Set 中的元素只会出现一次,即 Set 中的元素是唯一的,所以需要判断两个值是否相等
- Set 中+0和 -0 是不同的值,可以使用 Object.is(+0,-0)进行判断返回false ,+0 严格相等于 -0
- Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用
Set 中NaN和undefined都可以被存储在 Set 中,但是值得注意的是,尽管 NaN !== NaN,但是NaN之间在Set里却被视为相同的值(NaN 被认为是相同的,所以只能存一个)
const set1 = new Set('abc')//{'a','b','c'}
set1.add('abc')//{'a','b','c','abc'}
const set2 = new Set('aaa')//{'a'}
set2.add(undefined)//{'a',undefined}
const set3 = new Set(['abc'])//{'abc'}
set3.add(NaN)//{'abc',NaN}
2、Set 的实例属性:
size: 返回 Set 对象中的值的个数
const set1 = new Set('abc')
console.log(set1.size)// 3
const set2 = new Set('aaa')
console.log(set2.size)// 13、Set 的实例方法:
1)、add( value ): 在Set对象尾部添加一个元素, 返回该 Set 对象
2)、has(value): 判断Set对象中是否有一个元素,返回true/false
3)、clear( ): 移除Set对象内的所有元素
4)、delete( value ): 移除值为 value 的元素,并返回一个布尔值来表示是否移除成功 并且 has(value) 会在此之后返回 false
6)、entries(): 返回一个新的迭代器对象,该对象包含 Set 对象中的按插入顺序排列的所有元素的值的 [value, value] 数组。为了使这个方法和 Map 对象保持相似, 每个值的键和值相等
7)、forEach(( )=>{ }): 按照插入顺序,为 Set 对象中的每一个值调用一次 callBackFn
8)、keys( ):与 values() 方法相同,返回一个新的迭代器对象,该对象包含 Set 对象中的按插入顺序排列的所有元素的值
9)、values( ) : 返回一个新的迭代器对象,该对象包含 Set 对象中的按插入顺序排列的所有元素的值
let set = new Set();
set.add(1); // Set [ 1 ]
set.add(5); // Set [ 1, 5 ]
set.add(5); // Set [ 1, 5 ]//不变,因为已经存在一个值为 5 的成员了
set.add("abc"); // [ 1, 5, "abc" ]
const obj = {a: 1, b: 2};
set.add(obj);//
set.add({a: 1, b: 2}); // obj 指向的是不同的对象,所以可以添加进去
set.has(1); // true
set.has(3); // false
set.has(5); // true
set.has(Math.sqrt(25)); //true Math.sqrt(25) 找25的平方根
set.has("Abc".toLowerCase()); // true 敏感区分大小写
set.has(obj); // true
set.size; // 5
set.delete(5); // true,从 set 中移除 5
set.has(5); // false, 5 已经被移除
set.size; // 4,刚刚移除一个值
for (let item of mySet){
console.log(item) //按顺序输出 : 1, "abc", {"a": 1, "b": 2}, {"a": 1, "b": 2}
}
for (let item of mySet.keys()) {
console.log(item) //按顺序输出 : 1, "abc", {"a": 1, "b": 2}, {"a": 1, "b": 2}
}
for (let item of mySet.values()) {
console.log(item) //按顺序输出 : 1, "abc", {"a": 1, "b": 2}, {"a": 1, "b": 2}
}
//(key value 相等)
for (let [key, value] of mySet.entries()) {
console.log(item) //按顺序输出 : 1, "abc", {"a": 1, "b": 2}, {"a": 1, "b": 2}
}
// 使用 Array.from 转换 Set 为 Array
var arr = Array.from(set); // [1, "abc", {"a": 1, "b": 2}, {"a": 1, "b": 2}]
// Set 和 Array 互换
set2 = new Set([1, 2, 3, 4]);
set2.size;// 4
[...set2]; // [1,2,3,4]
// 用 forEach 迭代
set.forEach(function(value) {
console.log(value);// 依次输出 a,b,c
});4、应用:实现常见的基本集合
const setA = new Set([1, 2, 3, 4]);
const setB = new Set([2, 3]);
const setC = new Set([3, 4, 5, 6]);子集
const isSuperset = (set1, set2) => { for (const item of set2) { if (!set1.has(item)) { return false; } } return true; }; console.log('判断是否是子集', isSuperset(setA, setB));//true并集
const union = (set1, set2) => { const res = new Set(set1); for (const item of set2) { if (!set1.has(item)) { res.add(item); } } return res; }; console.log('返回并集', union(setA, setC));// Set [1, 2, 3, 4, 5, 6]交集
const intersection = (set1, set2) => { const res = new Set(); for (const item of set2) { if (set1.has(item)) { res.add(item); } } return res; }; console.log('返回交集', intersection(setA, setC));// Set [3, 4]不同的成员组成一个新的集合
const symmetricDifference = (set1, set2) => { const res = new Set(set1); for (const item of set2) { if (res.has(item)) { res.delete(item); } else { res.add(item); } } return res; }; console.log( '不同的成员组成一个新的集合', symmetricDifference(setA, setC) );// Set [1, 2, 5, 6]A中剔除B的成员
const difference = (set1, set2) => { const res = new Set(set1); for (const item of set2) { res.delete(item); } return res; }; console.log('A中剔除B的成员', difference(setA, setC));// Set [1, 2 ]
边栏推荐
- Hls4ml reports an error the board_ part definition was not found for tul. com. tw:pynq-z2:part0:1.0.
- SwiftUI 4 新功能大全之 Toggle与 Mixed Toggle 多个绑定组件
- 为定时器和延时器等其它情况的回调函数绑定当前作用域的this
- qobject_cast用法
- Linux下安装Redis,并配置环境
- HLS4ML进入方法
- Easycvr accesses the equipment through the national standard gb28181 protocol. What is the reason for the automatic streaming of the equipment?
- Win11快捷键切换输入法无反应怎么办?快捷键切换输入法没有反应
- GaussDB(for MySQL) :Partial Result Cache,通过缓存中间结果对算子进行加速
- Install redis under Linux and configure the environment
猜你喜欢

一个悄然崛起的国产软件,低调又强大!

Realize pyramids through JS (asterisk pyramid, palindrome symmetric digital pyramid)

Class loading mechanism

Graduation season | Huawei experts teach the interview secret: how to get a high paying offer from a large factory?

强大、好用、适合程序员/软件开发者的专业编辑器/笔记软件综合评测和全面推荐

类加载机制

安装sharp报错

GaussDB(for MySQL) :Partial Result Cache,通过缓存中间结果对算子进行加速

MYSLQ十种锁,一篇文章带你全解析

简单但现代的服务器仪表板Dashdot
随机推荐
math_ Use differentiation to calculate approximate value
Interview questions shared in today's group
集合对象值改变NULL值对象
Arduino Stepper库驱动28BYJ-48步进电机测试程序
JS的Proxy
2022/5/23-2022/5/30
Sum the amount
qobject_cast用法
新增订单如何防止重复提交
使用Zadig从0到1搭建持续交付平台
为定时器和延时器等其它情况的回调函数绑定当前作用域的this
一个程序员如何快速成长
PowerDesigner design name and comment replacement
Time series analysis using kibana timelion
Problems encountered in installing MySQL in docker Ubuntu container
[research materials] national second-hand housing market monthly report January 2022 - Download attached
有意思了!数据库也搞Serverless!
Redis installation and startup in Windows environment (background startup)
优质笔记软件综合评测和详细盘点(一) Notion、Obsidian、RemNote、FlowUs
qobject_ Cast usage