常用ES技巧二

文章目录

  • 一、`Object.entries()`和`Object.fromEntries()`
    • 1.1、`Object.entries()`
    • 1.2、`Object.fromEntries()`
  • 二、`Symbol`类型和`Symbol`属性
  • 三、`WeakMap`和`WeakSet`
  • 四、`Promise.allSettled()`
  • 五、`BigInt`
  • 六、`Array.of`和`Array.from`
  • 七、`.at`和`.flat`
  • 八、总结
  • 九、最后

一、Object.entries()Object.fromEntries()

  • Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组。
  • Object.fromEntries()方法将键值对列表转换为一个对象。

1.1、Object.entries()

当使用Object.entries()时,可以传入一个对象作为参数。这个对象可以是任何具有可枚举属性的对象。例如:

const obj = { a: 1, b: 2, c: 3 };const entries = Object.entries(obj);
console.log(entries); // [["a", 1], ["b", 2], ["c", 3]]

在这个例子中,我们将一个包含三个属性的对象传递给Object.entries()方法,并将返回的结果存储在entries变量中。entries变量现在是一个包含键值对数组的数组。

1.2、Object.fromEntries()

当使用Object.fromEntries()时,可以传入一个键值对数组作为参数。这个数组中的每个元素都是一个包含键和值的数组。例如:

const entries = [["a", 1], ["b", 2], ["c", 3]];const obj = Object.fromEntries(entries);
console.log(obj); // { a: 1, b: 2, c: 3 }

在这个例子中,我们将一个包含三个键值对的数组传递给Object.fromEntries()方法,并将返回的结果存储在obj变量中。obj变量现在是一个由键值对组成的对象。

二、Symbol类型和Symbol属性

  • Symbol是一种新的原始数据类型,用于创建唯一的标识符。

  • Symbol属性是对象中使用Symbol作为键创建的属性。

    const sym = Symbol('description');const obj = {[sym]: 'value'
    };console.log(obj[sym]); // value
    

三、WeakMapWeakSet

  • WeakMap是一种集合类型,其中键必须是对象,并且在没有其他引用时会被垃圾回收。

  • WeakSet是一种集合类型,其中元素必须是对象,并且在没有其他引用时会被垃圾回收。

    const wm = new WeakMap();const obj = {};wm.set(obj, 'value');console.log(wm.get(obj)); // valueconst ws = new WeakSet();ws.add(obj);console.log(ws.has(obj)); // true
    

    在这个例子中,我们创建了一个WeakMap和一个WeakSet实例。我们使用set()方法将obj对象添加到WeakMap中,并将值设置为value。然后,我们使用get()方法从WeakMap中获取值。类似地,我们使用add()方法将obj对象添加到WeakSet中,并使用has()方法检查集合中是否存在该对象。

四、Promise.allSettled()

  • Promise.allSettled()方法返回一个在所有给定的promise已被解析或被拒绝后决议的promise,并带有一个对象数组,每个对象表示对应的promise结果。
const promises = [Promise.resolve('resolved'),Promise.reject('rejected'),Promise.resolve('resolved')
];Promise.allSettled(promises).then(results => {console.log(results);}).catch(error => {console.error(error);});// 输出结果:// [//  { status: 'fulfilled', value: 'resolved' },//  { status: 'rejected', reason: 'rejected' },//  { status: 'fulfilled', value: 'resolved' }// ]

我们创建了一个包含三个promise的数组,并将其传递给Promise.allSettled()方法。然后,我们使用.then()方法处理返回的结果数组,或使用.catch()方法处理任何错误。

五、BigInt

  • BigInt是一种新的原始数据类型,用于表示任意精度的整数。
 const bigIntValue = BigInt(Number.MAX_SAFE_INTEGER) + BigInt(1);console.log(bigIntValue); // 9007199254740992n

六、Array.ofArray.from

  • Array.of()方法创建一个具有可变数量参数的新数组实例。
  • Array.of方法用于创建一个由参数组成的新数组。它与Array构造函数不同之处在于,当参数只有一个且为数字时,Array.of会创建一个只包含该数字的数组,而不是创建指定长度的空数组。
  • Array.from()方法从类似数组或可迭代对象创建一个新的数组实例。
  • Array.from方法将类似数组或可迭代对象转换为真正的数组。它可以接收第二个参数来进行映射或筛选操作。
const arr1 = Array.of(1, 2, 3);
console.log(arr1); // [1, 2, 3]const str = 'Hello';
const arr = Array.from(str);
console.log(arr); // 输出: ['H', 'e', 'l', 'l', 'o']const nums = [1, 2, 3, 4, 5];
const doubled = Array.from(nums, num => num * 2);
console.log(doubled); // 输出: [2, 4, 6, 8, 10]

七、.at.flat

  • .at()方法返回指定索引处的元素。
  • .at方法用于获取数组指定索引位置的元素,支持负数索引。
  • .flat()方法将嵌套的数组扁平化为一个新的数组。
  • .flat方法用于将多维数组扁平化为一维数组,可以指定扁平化的层数。
 const arr3 = [1, 2, 3, 4, 5];console.log(arr3.at(2)); // 3const arr4 = [1, [2, [3]]];console.log(arr4.flat()); // [1, 2, [3]]

八、总结

ES6引入了许多实用但相对较冷门的高级技巧。Object.entries()Object.fromEntries()可以方便地在对象和键值对之间进行转换。Symbol类型和Symbol属性可以创建唯一的标识符。

WeakMapWeakSet提供了一种在没有其他引用时自动垃圾回收的集合类型。Promise.allSettled()可以处理多个promise并返回所有结果。BigInt允许表示任意精度的整数。Array.ofArray.from.atflat提供了更方便的数组操作方法。这些技巧可以帮助开发者更高效地编写代码。

九、最后

本人每篇文章都是一字一句码出来,希望大佬们多提提意见。顺手来个三连击,点赞👍收藏💖关注✨。创作不易,给我打打气,加加油☕

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/458904.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

政安晨:示例演绎TensorFlow的官方指南(一){基础知识}

为什么要示例演绎? 既然有了官方指南,咱们在官方指南上看看就可以了,为什么还要写示例演绎的文章呢? 其实对于初步了解TensorFlow的小伙伴们而言,示例演绎才是最重要的。 官方文档已经假定了您已经具备了相当合适的…

史上最全嵌入式(学习路线、应用开发、驱动开发、推荐书籍、软硬件基础)

废话不多说直接上思维导图! 如果有觉得图片看不清楚的,有疑问的,可在评论区进行留言! 群号: 228447240 嵌入式总括 嵌入式书籍推荐 嵌入式软件知识 嵌入式硬件知识 嵌入式应用开发 嵌入式驱动开发 嵌入式视频推荐: 韦…

收到微信发的年终奖。。。

大家好,我是小悟 还剩一天就过除夕了,很多单位都已经放假了,街上的人越来越少,门店关着的很多,说明大家都陆陆续续回自己的家乡过年了。 或许你还在搬砖,坚守节前最后一波工作,或许你正在回家的…

Javaweb之SpringBootWeb案例之登录校验功能的详细解析

2. 登录校验 2.1 问题分析 我们已经完成了基础登录功能的开发与测试,在我们登录成功后就可以进入到后台管理系统中进行数据的操作。 但是当我们在浏览器中新的页面上输入地址:http://localhost:9528/#/system/dept,发现没有登录仍然可以进…

FL Studio21最新正式版更新下载及实用功能详解

FL Studio 21是一款功能强大的音乐制作软件,它经历了多个版本的更新,每次更新都会增加新的功能和优化现有功能,提高用户体验和工作效率。以下是FL Studio 21的一些版本更新、功能特点以及下载方式的介绍: 版本更新: F…

读书笔记:《修心》

前言 这是2024年读完的第一本书,简单写写读后感。 原本以为是我熟悉的那个写《浪潮之巅》的“吴军”老师,只是这个世界上同名的作家罢了。 《修心复杂世界的自在活法》,初看这本书名以为是什么心灵鸡汤的书,翻了几页之后发现竟…

倒计时61天

M-智乃的36倍数(normal version)_2024牛客寒假算法基础集训营3 (nowcoder.com) //非ac代码,超时了,54.17/100#include<bits/stdc.h> using namespace std; const int N1e55; const int inf0x3f3f3f3f; #define int long long int n; string s1[N]; void solve() {cin>…

【Django】ORM关系映射

关系映射 在关系型数据库中&#xff0c;通常不会把所有数据都放在同一张表中&#xff0c;不易于扩展&#xff0c;常见的关系映射有&#xff1a; 一对一映射&#xff0c;如一个身份证对应一个人。 一对多映射&#xff0c;如一个班级可以有多个学生。 多对多映射&#xff0c;如…

蓝桥杯嵌入式学习记录——点亮第一个LED(含软件的使用)

目录 一、蓝桥杯概述 二、软件的使用 三、点亮LED 一、蓝桥杯概述 蓝桥杯是一个编程大赛、商赛&#xff0c;获奖率高达60%&#xff08;省赛中一等奖10%、二等奖20%、三等奖30%&#xff09;&#xff0c;但这并不影响它的含金量&#xff0c;多所高校将它列为A类赛事并实行保研…

基于SpringBoot和PostGIS的震中影响范围可视化实践

目录 前言 一、基础数据 1、地震基础信息 2、全国行政村 二、Java后台服务设计 1、实体类设计 2、Mapper类设计 3、控制器设计 三、前端展示 1、初始化图例 2、震中位置及影响范围标记 3、行政村点查询及标记 总结 前言 地震等自然灾害目前还是依然不能进行准确的预…

机器人运动学林沛群——旋转矩阵

旋转矩阵 基本概念 三个主轴&#xff0c;可以看作是三个向量&#xff0c;为b在a的表达&#xff0c;以a为基准 旋转矩阵 B相对于A的姿态&#xff1a; B A R [ A X B ^ A Y B ^ A Z B ^ ] [ X ^ B ⋅ X ^ A Y ^ B ⋅ X ^ A Z ^ B ⋅ X ^ A X ^ B ⋅ Y ^ A Y ^ B ⋅ Y ^ A Z …

2024年2月8日 十二生肖 今日运势

小运播报&#xff1a;2024年2月8日&#xff0c;星期四&#xff0c;农历腊月廿九 &#xff08;甲辰年丙寅月壬寅日&#xff09;&#xff0c;法定工作日。 红榜生肖&#xff1a;马、猪、狗 需要注意&#xff1a;龙、蛇、猴 喜神方位&#xff1a;正南方 财神方位&#xff1a;正…