成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript 數組新增四個非破壞性方法!

開發
今天聊 JavaScript 的最新提案。開門見山,JavaScript 數組即將新增四個新的非破壞性方法。

今天聊 JavaScript 的最新提案。開門見山,JavaScript 數組即將新增四個新的非破壞性方法:

  • toReversed()
  • toSorted()
  • toSpliced()
  • with()

Change Array by copy 提案

這四個方法來源于新的 Change Array by copy 提案,目前已經處于 stage3階段,意味著基本上不會再有太大變化了,我們即將在各大瀏覽器里看到它們的實現。

提案地址:https://github.com/tc39/proposal-change-array-by-copy

數組的破壞性和非破壞性

為啥這個提案叫 Change Array by copy 呢?字面意思就是從副本里改變數組。

這就要說起數組的破壞性和非破壞性方法了:

有些數組的方法我們在調用的時候不會改變原始的數組,我們稱它們為非破壞性方法,比如我們經常用到的 filter、some、map、find 等方法,斗是不會改變原數組的:

但是,另外有一些方法是會改變原數組本身的,比如:sort、reverse、splice 等方法。

可以看到,原數組和排序后得到的新數組是一樣的,說明這個方法改變了原數組。很多時候我們想用這些方法,但是又不想改變原數組,我們可能會先創建一個副本,比如下面這些操作:

const sorted1 = array1.slice().sort();
const sorted2 = [...array1].sort();
const sorted3 = Array.from(array1).sort();

幾個數組的新方法,就是用來解決這樣的問題的。

toSorted()

.toSorted() 是 .sort() 的非破壞性版本:

const array = ['c', 'o', 'n', 'a', 'r', 'd', 'l', 'i'];
const result = array.toSorted();
console.log(result); // ['a', 'c', 'd', 'i', 'l', 'n', 'o', 'r']
console.log(array); // ['c', 'o', 'n', 'a', 'r', 'd', 'l', 'i']

下面是個簡單的 polyfill:

if (!Array.prototype.toSorted) {
Array.prototype.toSorted = function (compareFn) {
return this.slice().sort(compareFn);
};
}

toReversed()

.toReversed() 是 .reverse() 的非破壞性版本:

const array = ['c', 'o', 'n', 'a', 'r', 'd', 'l', 'i'];
const result = array.toReversed();
console.log(result); // ['i', 'l', 'd', 'r', 'a', 'n', 'o', 'c']
console.log(array); // ['c', 'o', 'n', 'a', 'r', 'd', 'l', 'i']

下面是個簡單的 polyfill:

if (!Array.prototype.toReversed) {
Array.prototype.toReversed = function () {
return this.slice().reverse();
};
}

with()

with() 是對數組的某個元素賦值操作的非破壞性版本,比如下面的操作:

array[index] = value

如果我們只是想得到一個新數組,又不想改變原數組,可以這樣用:

const array = ['c', 'o', 'n', 'a', 'r', 'd', 'l', 'i'];
const result = array.with(0, 'ConardLi')
console.log(result); // ['ConardLi', 'o', 'n', 'a', 'r', 'd', 'l', 'i'];
console.log(array); // ['c', 'o', 'n', 'a', 'r', 'd', 'l', 'i']

下面是個簡單的 polyfill:

if (!Array.prototype.with) {
Array.prototype.with = function (index, value) {
const copy = this.slice();
copy[index] = value;
return copy;
};
}

toSpliced()

.splice(start, deleteCount, ...items) 方法比其他幾個破壞性方法更復雜點:

  • 它從 start 開始刪除 deleteCount 個元素 ;
  • 然后把 items 插入到被刪除的位置;
  • 最后返回已刪除的元素。
const array = [1, 2, 3, 4, 5, 6];
const result = array.splice(1, 2, 0);
console.log(result); // [2, 3]
console.log(array); // [1, 0, 4, 5, 6]

.tospliced() 是 .splice() 的非破壞性版本,它會返回原數組變更后的版本,因此我們拿不到被刪除的元素:

const array = [1, 2, 3, 4, 5, 6];
const result = array.tospliced(1, 2, 0);
console.log(result); // [1, 0, 4, 5, 6]
console.log(array); // [1, 2, 3, 4, 5, 6]

下面是個簡單的 polyfill:

if (!Array.prototype.toSpliced) {
Array.prototype.toSpliced = function (start, deleteCount, ...items) {
const copy = this.slice();
copy.splice(start, deleteCount, ...items);
return copy;
};
}

polyfill提案目前還在 stage3階段,在生產使用最好使用 polyfill:

https://github.com/tc39/proposal-change-array-by-copy/blob/main/polyfill.js

責任編輯:趙寧寧 來源: code秘密花園
相關推薦

2023-06-25 07:57:31

2010-09-09 11:08:34

統一通信263EM263企業郵箱

2009-11-11 14:32:01

互聯網

2013-02-19 09:28:59

SDNOpenFlow交換機

2023-01-03 11:14:13

數字化轉型數字流程

2025-02-06 16:15:31

2022-07-06 10:04:45

JavaScript數組前端

2015-11-23 17:24:24

GIMP3.0版本編輯

2016-01-04 10:58:47

2015網絡安全黑客

2022-07-05 13:59:48

安全IT網絡攻擊

2021-11-04 05:56:38

網絡攻擊黑客網絡安全

2013-01-10 10:31:47

云安全

2022-06-27 23:31:01

JavaScript框架開發

2022-01-12 15:50:24

JavaScript開發循環

2022-05-10 14:08:56

云計算IT運營

2020-07-23 07:22:18

開發編程技術

2013-11-18 10:08:05

云計算

2021-08-05 13:26:18

網絡犯罪攻擊網絡安全

2009-03-13 09:39:34

JavaScript函數調用規則
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人免费视频网站在线看 | www免费视频 | 国产精品一区二区三区四区五区 | 天天草草草| 日韩中文一区二区三区 | 亚洲国产成人精 | 亚洲福利一区 | 欧美精品一区二区三区四区五区 | 成人国产a | 免费视频一区二区 | 成人在线中文字幕 | 91精品在线播放 | 黄久久久 | 色悠悠久| 久久专区| av网站免费观看 | 国产精品视频yy9299一区 | 一级在线视频 | 久久精品成人 | 亚洲精品国产电影 | www.国产| 日韩视频区 | 精品一二三区在线观看 | 日本精品免费 | 国产成人福利在线观看 | 国产成人自拍av | 在线观看毛片网站 | 亚洲高清在线 | 日本久久一区二区三区 | 日韩at| 久久国产精品视频 | 精品视频在线免费观看 | 野狼在线社区2017入口 | 国产成人精品999在线观看 | 久久久人成影片免费观看 | a免费视频 | 草比av| 久草久草久草 | 国产高清在线 | 国产日产久久高清欧美一区 | 午夜影院黄 |