[javaScript]ES2023 中引入非破坏性方法

对于 Array 的一些操作,例如 reverse、sort 等都会改变原数组,ES2023 对以下这些方法进行了拓展,提供了相同功能但是返回新副本的方法。

  • toReversed
  • toSorted
  • toSpliced
  • with

下面进行一个详细的介绍。

toReversed

  • reverse:反转数组元素,但是会改变数组本身
  • toReversed:跟 reverse 功能相同,但是返回新副本不会改变数组本身

示例 1.js

ini 复制代码
// reverse
const a = [1, 2, 3];
const b = a.reverse();

console.log(a); // [3, 2, 1]
console.log(b); // [3, 2, 1]

// toReversed 👍
const c = [1, 2, 3];
const d = c.toReversed();

console.log(c); // [1, 2, 3]
console.log(d); // [3, 2, 1]

toSorted

  • sort:对数组进行排序,但是会改变数组本身
  • toSorted:跟 sort 方法一样,但是返回新副本

示例 2.js

ini 复制代码
// sort
const a = [3, 1, 2];
const b = a.sort();

console.log(a); // [1, 2, 3]
console.log(b); // [1, 2, 3]

// toSorted 👍
const c = [3, 1, 2];
const d = c.toSorted();

console.log(c); // [3, 1, 2]
console.log(d); // [1, 2, 3]

toSpliced

  • splice:非常万能的方法可以对数组进行删除、替换数元素以及添加新元素
  • toSpliced:跟 splice 一样,但是操作不会对原数组进行改变

不过,由于 splice 和 toSpliced 的返回值存在以下差异,因此处理它们时似乎需要小心。

  • splice 的返回值被删除值的数组
  • toSpliced 的返回值返回从数组中删除元素的副本

示例 3.js

ini 复制代码
// splice
const a = [1, 2, 3, 4];
const b = a.splice(1,2);

console.log(a); // [1,4]
console.log(b); // [2,3] 返回值是删除的值排列的值

// toSpliced 👍
const c = [1, 2, 3, 4];
const d = c.toSpliced(1,2);

console.log(c); // [1,2,3,4]
console.log(d); // [1,4] 返回从数组中删除元素的副本

with

在第一个参数中指定数组的索引号,并将该元素替换为第二个参数的值。

JS 已经有一个单独的 with 语句,但它已被弃用,所以它很混乱,因为它与这次添加的数组操作的 with 方法重叠。

示例 4.js

ini 复制代码
// with 👍
const c = [1, 2, 3, 4];
const d = c.with(1,'👍');

console.log(c); // [1, 2, 3, 4]
console.log(d); // [1, '👍', 3, 4]

最后

这些方法的出现,使得你不需要每次都浅复制,代码看起来很清爽。

相关推荐
幼儿园老大18 分钟前
告别代码屎山!UniApp + Vue3 自动化规范:ESLint 9+ 扁平化配置全指南
javascript·vue.js
Liu.7741 小时前
vue3组件之间传输数据
前端·javascript·vue.js
|晴 天|1 小时前
前端闭包:从概念到实战,解锁JavaScript高级技能
开发语言·前端·javascript
全栈前端老曹1 小时前
【ReactNative】核心组件与 JSX 语法
前端·javascript·react native·react.js·跨平台·jsx·移动端开发
小小黑0071 小时前
快手小程序-实现插屏广告的功能
前端·javascript·小程序
@万里挑一2 小时前
vue中使用虚拟列表,封装虚拟列表
前端·javascript·vue.js
黑臂麒麟2 小时前
Electron for OpenHarmony 跨平台实战开发:Electron 文件系统操作实战
前端·javascript·electron·openharmony
1024肥宅2 小时前
工程化工具类:模块化系统全解析与实践
前端·javascript·面试
weixin_422555422 小时前
ezuikit-js官网使用示例
前端·javascript·vue·ezuikit-js
running up3 小时前
Java集合框架之ArrayList与LinkedList详解
javascript·ubuntu·typescript