前言
就在今日 凌晨2点,TC39组织 通过了一份 数组提案 进入stage3,意味着该提案投入 正式生产环境 已经是板上钉钉的事了。
这个主题叫 Change Array by copy的提案,一口气甩出了4个数组方法,并且每个都有实际的开发用途。
本文绝对 全网首发,认真读完本文,又可以卷死一批前端同学👍。
导读
toReversed() 数组反转
toSorted() 数组排序
toSpliced()数组增删改
with() 数组赋值
四个数组方法
1.toReversed()
实际开发中,我们经常会遇到这种 数据处理 的需求。
我们需要拿到一份数组反转后的数据,但对数组进行了 reverse 处理后,原数组却发生了 改变 。
let arr = [1,2,3];
arr.reverse() // [3,2,1];
arr // [3,2,1]
很显然,对于数组这样的复杂数据结构,我们需要对其进行一份拷贝。
这无疑不利于我们的开发效率。
toReversed() 会帮我们拷贝一份原数组,再进行 reverse 操作。
最终我们得到 翻转 后的数组,同时 不会 对原数组进行改变。
let arr1 = [1,2,3];
arr1.toReversed() //[3,2,1];
arr1 // [1,2,3]
实际开发用途很大,是一个不错的提案。
2. toSorted(function)
sort 和reverse 同理,排序的过程中,也会对我们的原数组进行更改。
toSorted 方法会 拷贝 一份数组进行排序,返回给我们期望的排序数组,并且不会给原数组进行 改变。
let arr = [3,1,2];
arr.toSorted() // [1,2,3];
arr // [3,1,2]
3. toSpliced()
toSpliced() 相对于 splice() 方来说,改动较大。
过去 splice() 方法的返回值是仅含 被删除 元素的数组。
同时 splice() 方法也对原数组进行改造。
let arr = [1,2,3];
//索引 1 的位置删除 1 个元素
arr.splice(1,1) // [2]
arr // [1,3]
而通常我们期望获得是 改造后的数组数据 ,如上例中的 [1,3] 而非 删掉 的元素 [2],并且希望 原数组 不要因此发生改变。
toSpliced方法 可以帮助我们 浅拷贝 一份原数组,并且返回值为 改造后的数组,并非删掉的元素。
let arr = [1,2,3];
//索引 1 的位置删除 1 个元素
arr.toSpliced(1,1) // [1,3]
arr // [1,2,3]
4.with
过去我们给数组元素进行赋值,通常采用 array[index] = xx 的方式
let arr = [1,99,3];
arr[1] = 2;
arr // [1,2,3]
如今 Javascript 支持通过 with() 方法来进行赋值,并且 with() 方法也秉持 Change Array by copy 的思想,不会 对原数组进行修改。
with(index,value) 方法支持两个参数,index 表示要赋值的数组索引,value 则为期望赋与的数值;
let arr = [1,10086,3];
arr.with(1,2);
arr // [1,2,3]
同时 with() 方法支持 小数类型 的索引信息,小数值 向下取整 地进行赋值。
let arr = [1,99,3];
arr.with(1.555,2);
arr // [1,2,3]
with()方法 会让一些跨语言爱好者更加友好地接受 Javascript,同时让 Javascript 语法更加规范和健壮。
这四个新增方法支持类型:
- Array
- Typed Array
如果对你有帮助的话,希望各位朋友 点赞 关注 收藏,你的鼓励就是我们继续推广Javascrpit 语言新特性的动力。
往期精选:
编辑:王明
审查:李智杰