首页 > 其他分享 >ES6基本语法(三)——Set集合和Map集合

ES6基本语法(三)——Set集合和Map集合

时间:2024-07-17 13:54:11浏览次数:10  
标签:ES6 Set console log Map 解构 let 集合

Set集合和拓展运算符

Set 集合

Set 是 JavaScript 中的一种数据结构,用于存储唯一值的集合。以下是 Set 集合的一些方法和操作的示例:

// 创建一个空 Set 集合
let fruits = new Set();

// 创建一个有初始值的 Set 集合
let fruits1 = new Set([1, 2, 3]);

// 添加元素
fruits.add(4);
fruits.add(5);

// 删除指定元素
fruits.delete(4);

// 检查 Set 是否包含某个元素
if (fruits.has(3)) {
    console.log('包含元素 3');
}

// 获取 Set 的大小
console.log(fruits.size); // 输出当前 Set 中的元素数量

// 清空 Set 集合
fruits.clear();

// 将 Set 集合转换为数组
let fruitsArray = Array.from(fruits);

// 使用 for-of 循环遍历 Set
for (let [key,value] of fruits) {
    console.log(key,value);
}

// 使用 forEach 方法遍历 Set
fruits.forEach((value, key) => {
    console.log(key, value);
});

// 将数组转换为 Set 实现数组去重
let uniqueFruits = [...new Set([1, 2, 2, 3, 4, 4, 5])];
console.log(uniqueFruits); // 输出: [1, 2, 3, 4, 5]

扩展运算符

扩展运算符(Spread Operator)允许你将一个可迭代的集合(如数组、字符串、Map、Set 等)展开成多个参数。以下是一些使用扩展运算符的例子:

// 将 Set 转化为数组
let set = new Set([1, 2, 3]);
let array = [...set];
console.log(array); // 输出: [1, 2, 3]

// 数组拼接
let arr1 = [1, 2, 3];
let arr2 = [4, 5, 6];
let combinedArr = [...arr1, ...arr2];
console.log(combinedArr); // 输出: [1, 2, 3, 4, 5, 6]

// 函数参数的展开
function sum(...args) {
    console.log(args);
}
sum(...[1, 2, 3]); // 输出: [1, 2, 3]

扩展运算符也可以用于复制数组或对象、合并数组等场景。

Map 集合

Map 是一种可增长的数据类型,它可以存储任意类型的键和值的映射关系。下面是 Map 集合的一些常用方法和操作:

// 创建一个空 Map 集合
let person = new Map();

// 创建一个有初始键值对的 Map 集合
let person1 = new Map([
    ['name', 'xiaoming'],
    ['age', 18]
]);

// 添加键值对
person.set('job', 'student');

// 如果添加相同的键,则会覆盖原来的值
person.set('name', 'programmer');

// 删除指定键
person.delete('job');

// 检查 Map 是否包含某个键
if (person.has('name')) {
    console.log('包含键 name');
}

// 获取 Map 的键值对数目
console.log(person.size); // 输出当前 Map 中的键值对数量

// 清空 Map 集合
person.clear();

// 将 Map 集合转换为数组
let mapToArray = Array.from(person);

// 使用扩展运算符将 Map 转换为数组
let mapAsArray = [...person1];

// 使用 for-of 循环遍历 Map 集合
for (let [key, value] of person1.entries()) {
    console.log(`${key}: ${value}`);
}

// 使用 forEach 遍历 Map 集合
person1.forEach((value, key) => {
    console.log(`${key}: ${value}`);
});

// Map 的解构语法
let mapDeconstructed = person1.entries();
let [firstKey, firstValue] = mapDeconstructed.next().value;
console.log(firstKey, firstValue); // 输出第一个键值对

在上面的代码中,entries()方法返回一个迭代器,它包含了 Map 集合中的每个元素,每个元素都是一个键值对的数组。使用 for...of 循环可以直接遍历这些键值对,而 forEach 方法则允许你对每个键值对执行回调函数。

Map 的解构语法允许你直接获取每个键值对中的键和值。例如,[firstKey, firstValue] = mapDeconstructed.next().value; 这行代码会将 mapDeconstructed 迭代器的第一个值解构成键和值。

解构语法

解构语法是 ES6 引入的一种方便的模式匹配机制,它允许你从数组或对象中提取数据并赋值给不同的变量。下面是一些解构的基本用法:

数组解构

// 从数组中解构出值
let [a, b, c] = [1, 2, 3];
console.log(a, b, c); // 输出: 1 2 3

// 可以忽略某些位置的值
let [,, d] = [1, 2, 3];
console.log(d); // 输出: 3

// 提取部分元素
let [e, , f] = [1, 2, 3];
console.log(e, f); // 输出: 1 3

// 解构默认值
let [g = 7, h = 8] = [1];
console.log(g, h); // 输出: 1 8

对象解构

// 从对象中解构出属性
let obj = { p: 'perimeter', area: 'area' };
let { p, area } = obj;
console.log(p, area); // 输出: perimeter area

// 属性别名
let { x: width, y: height } = { x: 10, y: 20 };
console.log(width, height); // 输出: 10 20

// 默认值
let { foo = 100 } = { bar: 200 }; // 当foo不存在时,使用默认值
console.log(foo); // 输出: 100

函数参数解构

// 函数参数解构
function example({ x, y }) {
    console.log(x + y);
}
example({ x: 1, y: 2 }); // 调用函数时传入一个对象,x 和 y 会被解构出来

// 函数返回解构
function returnPoint() {
    return { x: 10, y: 20 };
}
let { x, y } = returnPoint();
console.log(x, y); // 输出: 10 20

字符串解构

let [a, b, c] = 'hello';
console.log(a, b, c); // 输出: h e l

Map 解构

let m = new Map();
m.set('one', 1);
m.set('two', 2);

let [pair] = m;
console.log(pair); // 输出: one 1

Set 解构

let s = new Set();
s.add('one').add('two');

let [first, second] = s;
console.log(first, second); // 输出: one two

函数参数中的默认值

function drawRectangle({ width = 100, height = 50 } = {}) {
    console.log(width, height);
}
drawRectangle({}); // 输出: 100 50
drawRectangle({ height: 100 }); // 输出: 100 100
drawRectangle({ width: 50, height: 200 }); // 输出: 50 200

解构是一种强大的特性,可以让你更容易地处理复杂的数据结构,减少代码量,提升开发效率。

标签:ES6,Set,console,log,Map,解构,let,集合
From: https://blog.csdn.net/weixin_72939806/article/details/140487297

相关文章

  • MATLAB程序复现-基于多面体不确定集合的电力系统灵活性量化评估方法
    摘要:随着风电、光伏等新能源接入比例的不断提高,源荷不确定性的上升扩大了电力系统的运行灵活性需求。为准确量化电力系统的灵活性需求,制定兼顾灵活性与经济性的优化方案,提出了一种基于多面体不确定集合的电力系统灵活性量化评估方法。首先,采用多面体不确定集合量化多个光伏电站......
  • setState异步更新数据导致的问题
    背景子组件使用ProDescriptions组件,通过传入columns和request构建列表。<Modalopen={visible}><ProDescriptionscolumns={columnsasany}request={getTableRequestasany}/></Modal>父组件通过调用子组件useImperativeHandle提供的方法,改......
  • Setup Babel ES6 for Express and Nodejs
    Createprojectandinstalldependenciesmkidrmy-app&&cdmy-appnpminit-ynpmi-D@babel/cli@babel/core@babel/node@babel/preset-envnpmiexpresssCreate.babelrc{"presets":["@babel/preset-env"]}Writeawebs......
  • es6.8.5集群部署(tsl认证)
    环境:OS:Centos7es:6.8.5节点1:192.168.1.101节点2:192.168.1.104节点3:192.168.1.105 ######################################每个节点安装es#####################1.创建中间件安装目录和数据文件、日志文件目录[root@essoft]#mkdir-p/usr/local/services[root@essof......
  • [ABC347E] Set Add Query题解
    思路通过读题发现,每个数变化当且仅当这个数在集合内。所以不妨设它被添加进来的时间点为\(L_i\),它被删除的时间点为\(R_i\),所以它被增加的数量就是这段时间内集合数量之和。所以用一个变量\(cnt\)模拟当前集合内有多少个数,前缀和维护即可。具体实现参见代码。代码#include<......
  • Solution Set - NOI真题
    NOI2024RP++!NOI2021Day1T1Link&Submission.对整棵树做轻重链剖分。每一次修改,找到轻标记边集合中涉及到该路径的边删掉。然后,拿出重链上的所有轻边和重链。,把重链上除了底部的点全部标记为“到重儿子的边是标记边”,把所有轻边加入轻标记边集合。每一次查询,查询重链上有多少个......
  • setfacl设置权限与chomd设置权限区别
    setfacl和chmod都是用于设置Linux系统中文件和目录权限的命令,但它们之间存在一些关键区别:基本权限vs.访问控制列表(ACL):chmod:用于设置文件或目录的基本权限,这些权限分为用户(user)、用户组(group)和其他(others)三类。你可以设置读(r)、写(w)和执行(x)权限。chmod......
  • 集合框架之List
    目录1.什么是UML?2.集合框架3.List集合1.特点 有序 不唯一 2.遍历方式 for下标 foreach 迭代器 3.删除 for循环正向删除for循环逆向删除迭代器删除(推荐)4.迭代器原理5.泛型6.ArrayList、LinkedList和Vector的区别、1.ArrayList和LinkedList的区别......
  • 解决 React 中 setInterval 无法更新状态的问题:长按加速的实现
    解决React中setInterval无法更新状态的问题:长按加速的实现在开发React应用时,我们经常会遇到需要定时更新组件状态的场景。setInterval是一个常用的定时器函数,但在React中使用它时,可能会遇到状态无法更新的问题。今天,我们就来深入探讨一下这个问题,并通过一个长按加速的例......
  • 木舟0基础学习Java的第十九天(装饰设计模式,转换流,对象操作流(序列化),Properties集合)
    装饰设计模式创建一个接口用一个类实现接口再创建一个类实现这个接口第二个类中包含第一个类中的方法和自己的方法还可以增强案例:publicinterfaceCar{publicvoidrun();publicvoidcarry();}publicclassTaxiimplementsCar{@Overridepub......