ES15:Object.groupBy() 和 Map.groupBy()、Promise.withResolvers() 相关知识点

系列文章目录

ES6中 对象字面量、解构赋值、var,let ,const、块及作用域、展开运算符与剩余参数相关知识点
ES6中 Map 集合类型知识点、常见使用场景、以及案例
ES6中 Set集合知识点、常见使用场景、以及案例
ES6中 迭代器与生成器,相关知识点、常见使用场景、以及案例
ES6中 Promise 相关知识点、常见使用场景、以及案例
ES6中 箭头函数、this的指向问题

ES7:includes()、指数运算符 详细教程
ES8:async/await、Object 的新静态方法、padStart/padEnd、函数参数列表末尾允许逗号 相关知识点
ES9:对象扩展与剩余参数运算符、异步迭代、Promise新增方法、模板字符串修订 相关知识点
ES10:数组扁平化、对象转换、字符串修剪、catch参数、Symbol描述文字、toString修、sort排序、标准化的globalThis 相关知识点
ES11:可选链操作符、空值合并运算符、allSettled、动态导入、matchAll、meta 相关知识点
ES12:逻辑赋值运算符、数字分隔符、replaceAll、Promise新方法、WeakRef、Setter/Getter 相关知识点
ES13:类私有属性和方法、顶层 await、at() 方法、Object.hasOwnProperty()、类静态块 相关知识点
ES14:数组的新"拷贝并修改"方法、findLast() 和 findLastIndex()、 Symbol 作为 WeakMap 的键 相关知识点
ES15:Object.groupBy() 和 Map.groupBy()、Promise.withResolvers() 相关知识点
ES16:Set 集合方法增强、Promise.try、迭代器助手、JSON 模块导入 相关知识


文章目录

  • 系列文章目录
  • [一、Object.groupBy() 和 Map.groupBy()](#一、Object.groupBy() 和 Map.groupBy())
  • 二、Promise.withResolvers()
  • [三、String.prototype.isWellFormed() 和 toWellFormed()](#三、String.prototype.isWellFormed() 和 toWellFormed())

ECMAScript 2024(简称 ES15)于 2024 年 6 月正式获批。这次更新为 JavaScript 带来了一系列非常实用的标准功能,涵盖了数据分组、异步操作、正则增强以及内存管理等多个方面。

以下是 ES15 引入的所有新功能详解、代码教程及示例:


一、Object.groupBy() 和 Map.groupBy()

这是 ES15 最受关注的特性。以前我们需要手动使用 reduce 来实现数据分组,现在有了原生方法。

  • Object.groupBy: 返回一个普通对象(原型为 null),适合大多数场景。

  • Map.groupBy: 返回一个 Map 对象,适合键是复杂对象(如实例、数组)的情况。

javascript 复制代码
const fruits = [
  { name: "苹果", color: "红色", quantity: 5 },
  { name: "香蕉", color: "黄色", quantity: 10 },
  { name: "樱桃", color: "红色", quantity: 12 },
];

const groupedByColor = fruits.reduce((accumulator, currentFruit) => {
  // 1. 获取当前水果的颜色作为"键"
  const key = currentFruit.color;

  // 2. 如果结果对象里还没有这个颜色的分类,先初始化一个空数组
  if (!accumulator[key]) {
    accumulator[key] = [];
  }

  // 3. 将当前水果推入对应的颜色数组中
  accumulator[key].push(currentFruit);

  // 4. 返回累加器,供下一轮循环使用
  return accumulator;
}, {}); // ← 注意:这里传入 {} 作为 accumulator 的初始值

console.log(groupedByColor);
javascript 复制代码
const fruits = [
  { name: "苹果", color: "红色", quantity: 5 },
  { name: "香蕉", color: "黄色", quantity: 10 },
  { name: "樱桃", color: "红色", quantity: 12 },
];

// 使用 Object.groupBy 按颜色分组
const inventoryByColor = Object.groupBy(fruits, (fruit) => fruit.color);

console.log(inventoryByColor);
/* 输出:
{
  红色: [ { name: "苹果", ... }, { name: "樱桃", ... } ],
  黄色: [ { name: "香蕉", ... } ]
}
*/

二、Promise.withResolvers()

简单来说,它的作用是:把 Promise 对象本身,以及它的 resolve 和 reject 控制句柄一并"解耦"出来。

javascript 复制代码
const { promise, resolve, reject } = Promise.withResolvers();

// 可以在任何地方手动触发解决
setTimeout(() => {
  resolve("手动异步任务完成!");
}, 1000);

promise.then(console.log);

三、String.prototype.isWellFormed() 和 toWellFormed()

JavaScript 字符串使用 UTF-16 编码。如果处理不当,可能会产生不完整的代理对(lone surrogates),导致 encodeURI 等函数崩溃。

  • isWellFormed(): 检查字符串是否包含畸形的 Unicode 序列。

  • toWellFormed(): 将畸形的序列替换为 Unicode 替换字符(U+FFFD),确保字符串"安全"。

javascript 复制代码
const illFormed = "Hello\uD800World"; // 包含孤立的高位代理

console.log(illFormed.isWellFormed()); // false

// 转换为良构字符串以避免后续 API 报错
const wellFormed = illFormed.toWellFormed();
console.log(wellFormed); // "HelloWorld"
相关推荐
黑牛儿2 小时前
PHP 8.3性能暴涨实测|对比8.2,接口响应提速30%,配置无需大幅修改
android·开发语言·后端·php
Cache技术分享2 小时前
386. Java IO API - 监控目录变化
前端·后端
guygg882 小时前
极化码(Polar Codes)的MATLAB实现
开发语言·数据结构·matlab
Hooray2 小时前
管理后台框架 AI 时代的版本答案,Fantastic-admin 6.0 它来了!
前端·前端框架·ai编程
2501_913680002 小时前
Vue3项目快速接入AI助手的终极方案 - 让你的应用智能升级
前端·vue.js·人工智能·ai·vue·开源软件
开开心心_Every2 小时前
动图制作工具,拆分转视频动态照离线免费
运维·前端·人工智能·edge·pdf·散列表·启发式算法
Xiu Yan2 小时前
Java 转 C++ 系列:函数模板
java·开发语言·c++
饭后一颗花生米2 小时前
2026 前端实战:AI 驱动下的性能优化与工程化升级
前端·人工智能·性能优化
froginwe112 小时前
如何使用 AppML
开发语言