”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 这些新的 JavaScript 方法改变了游戏规则!

这些新的 JavaScript 方法改变了游戏规则!

发布于2024-11-16
浏览:408

These ew JavaScript Methods are a game changer!

2023 年 7 月,ECMAScript 发布了多项 JavaScript 新规范。一些功能包括不修改现有数组的新数组方法。在这篇博客中,我们将讨论其中的三个一个从 2024 年开始),如果您想了解 Web 和 JavaScript 的最新趋势,您必须了解它们!

Array.toSorted()

原始的 Array.sort() 对数组的元素进行排序就地。有时您可能不想要这种行为。在编程中,避免修改现有值并返回新版本通常是一个好习惯。

Array.toSorted() 通过返回一个新数组来解决这个问题,其中包含回调函数中描述的已排序元素!

我特别喜欢这个功能,因为早在 VSCode 和 Web 浏览器对其提供适当支持之前我就已经开始在我的代码中使用它了!

let numbers = [4, 2, 1, 3];
let sortedNumbers = numbers.toSorted();
console.log(sortedNumbers); // Output: [1, 2, 3, 4]

Array.toReversed()

Array.toReversed() 是一个新增功能,它提供了一种不可变的方式来反转数组。与 Array.reverse() 修改原始数组不同,Array.toReversed() 返回数组的反向副本,保持原始数组不变。

let letters = ['a', 'b', 'c', 'd'];
let reversedLetters = letters.toReversed();
console.log(reversedLetters); // Output: ['d', 'c', 'b', 'a']
console.log(letters); // Output: ['a', 'b', 'c', 'd']

Array.ToSpliced()

Array.toSpliced() 提供了一种非破坏性的方法来删除、替换或添加数组中的元素。传统的 Array.splice() 直接修改数组,但 Array.toSpliced() 创建一个应用更改的新数组,保持原始数组不变。当您需要应用更改而不影响源数据时,这可能很有用。

let numbers = [1, 2, 3, 4, 5];
let splicedNumbers = numbers.toSpliced(1, 2, 6, 7);
console.log(splicedNumbers); // Output: [1, 6, 7, 4, 5]
console.log(numbers); // Output: [1, 2, 3, 4, 5]

对象.groupBy()

该方法在 ES2024 中正式发布,但之前在 polyfill 中仍然可用,并且已经推进到 ECMAScript 的后期阶段。

Object.groupBy() 根据特定对象属性对给定数组的项目进行分组。这是非常有用的,当您想要对某个对象列表进行分组,然后在键值结构中相应地迭代它们时,它会非常方便。关于此方法的一个有趣的事实是,由于 Web 兼容性问题,它没有作为数组的原型方法实现。 (许多较旧的 JavaScript 库已经在 Array.prototype.group() 命名空间中实现了一些代码,这就是原因!)

奖励:实现您自己的 Object.groupBy() 以按多个元素进行分组

最终,您可能还需要按多个属性进行分组。原始的 Object.groupBy() 仅在一层进行分组。

在您的项目中实现以下代码,以按多个属性对元素进行分组!

function multiLevelGroupBy(array, criteria) {
  // Base case: if no criteria are left, return the array itself
  if (criteria.length === 0) return array;

  // Get the first criterion
  const [firstCriterion, ...remainingCriteria] = criteria;

  // Group by the first criterion
  const grouped = array.reduce((acc, item) => {
    const key = firstCriterion(item);
    if (!acc[key]) acc[key] = [];
    acc[key].push(item);
    return acc;
  }, {});

  // For each group, recursively apply the remaining criteria
  for (let key in grouped) {
    grouped[key] = multiLevelGroupBy(grouped[key], remainingCriteria);
  }

  return grouped;
}

例子:

const data = [
  { country: 'USA', state: 'California', city: 'Los Angeles', name: 'John' },
  { country: 'USA', state: 'California', city: 'San Francisco', name: 'Alice' },
  { country: 'USA', state: 'New York', city: 'New York City', name: 'Bob' },
  { country: 'Canada', state: 'Ontario', city: 'Toronto', name: 'Carol' },
  { country: 'Canada', state: 'Quebec', city: 'Montreal', name: 'Dave' },
]

let groupedData = multiLevelGroupBy(data, [
  item => item.country,
  item => item.state,
  item => item.city
]);

console.log(groupedData);
/* Expected Output: */
{
  USA: {
    California: {
      'Los Angeles': [{ country: 'USA', state: 'California', city: 'Los Angeles', name: 'John' }],
      'San Francisco': [{ country: 'USA', state: 'California', city: 'San Francisco', name: 'Alice' }]
    },
    New York: {
      'New York City': [{ country: 'USA', state: 'New York', city: 'New York City', name: 'Bob' }]
    }
  },
  Canada: {
    Ontario: {
      Toronto: [{ country: 'Canada', state: 'Ontario', city: 'Toronto', name: 'Carol' }]
    },
    Quebec: {
      Montreal: [{ country: 'Canada', state: 'Quebec', city: 'Montreal', name: 'Dave' }]
    }
  }
}

结局!

如果您已阅读完本文,非常感谢您的阅读! ?

版本声明 本文转载于:https://dev.to/samirmishra27/these-4-new-javascript-methods-are-a-game-changer-35fa?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-11-16
  • 为什么 C/C++ 中 `size_t` 是无符号的:历史的必然还是现代的 bug 磁石?
    为什么 C/C++ 中 `size_t` 是无符号的:历史的必然还是现代的 bug 磁石?
    为什么 size_t 无符号?Bjarne Stroustrup 的观察结果是“使用无符号而不是 int 来多获得一位来表示正整数几乎从来都不是一个好主意”引起了人们对将 size_t 设为无符号的决定的担忧。历史起源最初,size_t 是无符号的,以适应具有 16 位指针的体系结构,例如 DOS ...
    编程 发布于2024-11-16
  • 如何使用 Selenium Python 从 Shadow Root 中提取信息?
    如何使用 Selenium Python 从 Shadow Root 中提取信息?
    如何使用 Selenium 从影子根中提取信息 PythonSelenium 为 Web 自动化提供了一个强大的框架,包括提取信息的能力来自动态加载的 Web 元素(例如影子根)的信息。本指南将演示如何克服从影子根中的特定在线商店提取产品标签和其他字段的挑战。挑战:从影子根中提取信息 当遇到影子根时...
    编程 发布于2024-11-16
  • 如何使用特定字段中的值数组从 MySQL 表中选择数据?
    如何使用特定字段中的值数组从 MySQL 表中选择数据?
    从 MySQL 表中选择特定字段中包含值的数组在使用 MySQL 数据库时,您可能会遇到需要的场景根据存储在数组中的值检索数据。例如,假设您有一个名为 $array 的数组,其中包含用户 ID 列表:$array = array(1, 40, 20, 55, 29, 48);To选择 myField...
    编程 发布于2024-11-16
  • 在 HTML 中添加 Javascript 文件的最佳方法
    在 HTML 中添加 Javascript 文件的最佳方法
    在 HTML 中,有多种方法可以包含 JavaScript 文件。我将解释四种不同的方法及其缺点,最后强调最佳方法。 1.中的 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8...
    编程 发布于2024-11-16
  • 为什么我的 Bootstrap 4 列是垂直对齐而不是水平对齐?
    为什么我的 Bootstrap 4 列是垂直对齐而不是水平对齐?
    Bootstrap 4 列对齐不一致在从 Bootstrap 3 到 4 的过渡中,您注意到您的列是垂直对齐的,而不是水平地。这可以归因于 Bootstrap 4 中网格系统的更改。Col-12 Issue在 Bootstrap 3 中,您可以使用以下方法将列包装在父行中“col-12”类。这在 B...
    编程 发布于2024-11-16
  • 如何在 Python 中确定生成器是否为空
    如何在 Python 中确定生成器是否为空
    确定生成器的空性在Python中,生成器是用于惰性评估和迭代大型数据集的强大工具。然而,由于发电机的动态特性,确定发电机是否为空是一个独特的挑战。与列表或元组不同,生成器没有大小属性​​,简单地迭代它们会导致 StopIteration 异常。Peek 与 HasNext有些人可能会建议使用 pee...
    编程 发布于2024-11-16
  • 如何基于公共列合并多个 DataFrame 并保留共享行?
    如何基于公共列合并多个 DataFrame 并保留共享行?
    基于公共列合并多个数据帧您有多个具有公共列“日期”的数据帧,并且需要合并它们同时保留所有数据帧共有日期的行。递归函数方法可能很复杂并且容易出错。这是使用 pandas 强大的分组和合并功能的更简单的解决方案:import pandas as pd # Create a list of datafra...
    编程 发布于2024-11-16
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-11-16
  • 为什么 PHP 中的特殊字符会显示为带问号的黑钻石?
    为什么 PHP 中的特殊字符会显示为带问号的黑钻石?
    PHP字符编码问题:带有问号的小黑钻石用户在使用PHP从数据库中检索数据时经常遇到一个特殊问题:特殊字符(例如引号)显示为带有问号 (�) 的黑色菱形。此问题是由于数据的编码与用于显示它的编码之间的差异引起的。要解决此问题,您可以实现多种方法:HTTP 标头: 添加 HTTP 标头,为浏览器指定正确...
    编程 发布于2024-11-16
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-11-16
  • CURL 可以替代 file_get_contents 来获取外部链接吗?
    CURL 可以替代 file_get_contents 来获取外部链接吗?
    使用 CURL 获取外部链接(替代 file_get_contents)为了获取特定页面上的外部链接,通常使用 file_get_contents 函数。但是,当您使用的服务器不支持此功能时,CURL 可以作为一个可行的替代方案。要实现 CURL,您可以使用以下代码:function file_ge...
    编程 发布于2024-11-16
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-11-16
  • Go的FileMode函数如何处理八进制和十进制权限转换?
    Go的FileMode函数如何处理八进制和十进制权限转换?
    Go 中 FileMode 函数的权限解析os.FileMode 函数在设置标志之前转换各种格式的权限。这些格式包括整数、八进制表示形式以及可能的其他形式。从整数转换为 os.FileMode 时,该函数不会显式辨别整数是用八进制还是十进制表示。十进制表示形式被解释为常规整数。数字的八进制表示形式通...
    编程 发布于2024-11-16
  • ## 如何在 Android 上从 FTP 服务器下载文件:哪个 Java 库最好?
    ## 如何在 Android 上从 FTP 服务器下载文件:哪个 Java 库最好?
    适用于 Android 的 FTP 库正在寻找一个可靠的 Java 库,以方便从 Android 设备上的 FTP 服务器下载和恢复文件?让我们深入研究一些潜在的解决方案。Apache Commons FTP考虑一下 Apache Commons FTP,它是一个广泛使用且备受推崇的 FTP 操作库...
    编程 发布于2024-11-16

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3