[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]

最后

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

相关推荐
英俊潇洒美少年2 小时前
Vue 生产环境打包:SourceMap、压缩、混淆、加密全解 + 最佳实践
前端·javascript·vue.js
巴博尔3 小时前
UNIAPP中NVUE页面 动画
android·前端·javascript·ios·uni-app
猫头虎-前端技术3 小时前
JS 作用域与闭包:从变量提升到闭包陷阱的超详细解析
开发语言·javascript·云计算·bootstrap·ecmascript·openstack·perl
她说人狗殊途5 小时前
基于 vue-cli 创建
前端·javascript·vue.js
大家的林语冰6 小时前
Deno 2.8 正式发布,再次超越 Bun,史上最大的次版本升级诞生!
前端·javascript·node.js
影寂ldy6 小时前
C#数组的属性和方法(Clear / Copy / IndexOf )
开发语言·javascript·c#
Brave & Real6 小时前
小程序 const 在js中以及与同类的var和let之间的差异
javascript·微信小程序·小程序
米丘7 小时前
React 19.x 的 lazy 与 Suspense
前端·javascript·react.js
ZC跨境爬虫8 小时前
跟着 MDN 学CSS day_21:(图像溢出控制与表单元素样式定制)
前端·javascript·css·ui·交互
riuphan8 小时前
JavaScript 中的 this 关键字
javascript