最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從Element日期組件源碼中學(xué)到的兩個(gè)工具方法技巧

 更新時(shí)間:2023年08月17日 09:13:22   作者:xingba-coder  
這篇文章主要介紹了從Element日期組件源碼中學(xué)到的兩個(gè)工具方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

最近翻到 ElementUI 的日期組件源碼,看到一些處理日期的工具方法,挺有意思,平常沒(méi)有注意到,特此記錄下來(lái)。

獲取當(dāng)前日期的前一天,后一天

export const prevDate = function(date, amount = 1) {
  return new Date(date.getFullYear(), date.getMonth(), date.getDate() - amount);
};
export const nextDate = function(date, amount = 1) {
  return new Date(date.getFullYear(), date.getMonth(), date.getDate() + amount);
};

這里獲取當(dāng)前日期的前一天用的是 date.getDate() - 1 而不是 date.getTime() - 24 * 60 * 60 * 1000 是為了避免在夏令時(shí)轉(zhuǎn)換時(shí)導(dǎo)致的錯(cuò)誤。

在某些國(guó)家,比如英國(guó),每年都會(huì)實(shí)行夏令時(shí)制。

夏令時(shí),又稱(chēng)作Daylight Saving Times(DST),是為了節(jié)省能源而人為規(guī)定的時(shí)間制度,夏天天亮得早,所以大家早起一個(gè)小時(shí),就能多享受日光,從而減少用電量。冬天晚起一個(gè)小時(shí),早上就能將將趕上天亮。

每年夏天的時(shí)候,英國(guó)都要把時(shí)間往前調(diào)一個(gè)小時(shí),變成+1。比如:每年在三月最后一個(gè)周日的夜晚,時(shí)間會(huì)神奇地從00:59直接變成02:00。這就是夏令時(shí)的時(shí)間變化

所以在夏令時(shí)起止當(dāng)天如果用 date.getTime() (+)- 24 * 60 * 60 * 1000 獲取前一天后一天可能會(huì)導(dǎo)致錯(cuò)誤。

創(chuàng)建包含 1-N 的數(shù)組

Element 的做法是利用 Function.prototype.apply 的第二個(gè)參數(shù)可以是類(lèi)數(shù)組對(duì)象來(lái)實(shí)現(xiàn);

export const range = function(n) {
  return Array.apply(null, {length: n}).map((_, n) => n);
};

上面的 Array.apply(null, {length: n}) 將會(huì)創(chuàng)造 n 個(gè)值為 undefined 的數(shù)組,再利用 map 函數(shù)一個(gè)個(gè)改變數(shù)組值;

還有很多種實(shí)現(xiàn)方法,而且有比上面執(zhí)行速度更快的方法;

(1)Array.from()

// 第一種
Array.from(Array(N), (_, i) => i+1)
// 第二種
Array.from({length: N}, (_, i) => i + 1)
// 第三種
Array.from({length:N}, Number.call, i => i + 1)

Array.from() 可以通過(guò) 可迭代對(duì)象 和 類(lèi)數(shù)組對(duì)象(帶有 length 屬性和索引元素的對(duì)象) 來(lái)創(chuàng)建數(shù)組;
并且如果 類(lèi)數(shù)組對(duì)象 只有length屬性沒(méi)有索引元素,那么創(chuàng)建的數(shù)組值都為 undefined 參考

Array.from() 的第二個(gè)參數(shù)為一個(gè)可選的 mapFn,類(lèi)似于數(shù)組 map 函數(shù);但不同的是Array.from() 的 mapFn 會(huì)對(duì)空槽元素執(zhí)行回調(diào)函數(shù);上面方式的比 Array.apply(null, {length: n}).map((_, n) => n); 的優(yōu)勢(shì)是不會(huì)創(chuàng)建中間數(shù)組;

第三種方法,第三個(gè)參數(shù)是一個(gè)函數(shù),會(huì)被 Number.call 當(dāng)作 this 調(diào)用

(2)while 循壞

let i=0, a=Array(N);
while(i<N) a[i++]=i;

(3)for 循環(huán)

var foo = [];
for (var i = 1; i <= N; i++) {
   foo.push(i);
}

(4)Array.prototype.fill

Array(N).fill().map((_, i) => i+1);

和 Array.from() 類(lèi)似,Array(N).fill() 也會(huì)創(chuàng)建 N 個(gè)值為 undefined 的數(shù)組;

(5)Array(N).join().split(',')

Array(N).join().split(',').map((_, i) => i+1 );

Array(N) 會(huì)創(chuàng)建 N 個(gè)空槽組成的數(shù)組,空槽既不是 undefined,也不是空字符串;并且 map 也不會(huì)對(duì)空槽元素執(zhí)行回調(diào)函數(shù),所以需要通過(guò) Array(N).join().split(',') 將會(huì)得到 N 個(gè)字符串組成的數(shù)組;

(6)擴(kuò)展運(yùn)算符

[...Array(N).keys()].map(x => x + 1);
[...Array(N+1).keys()].slice(1)

[...Array(N)] 擴(kuò)展運(yùn)算符會(huì)將空槽元素轉(zhuǎn)化為 undefined

(7)Uint8Array

new Uint8Array(5).map((item, i) => i + 1);

性能

對(duì)以上方式進(jìn)行性能測(cè)試,測(cè)試工具是 jsbench ,測(cè)試的的瀏覽器版本是谷歌 115.0.5790.110(正式版本) (64 位)

結(jié)果如下

設(shè)置初始值 N 為 1000000,ops 為每秒操作數(shù),圖中結(jié)果按照從高到低排序;while 循環(huán)最快

參考資料

到此這篇關(guān)于從Element日期組件源碼中學(xué)到的兩個(gè)工具方法的文章就介紹到這了,更多相關(guān)Element日期組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue與react詳細(xì)

    vue與react詳細(xì)

    react在中后臺(tái)項(xiàng)目中由于在處理復(fù)雜的業(yè)務(wù)邏輯或組件的復(fù)用問(wèn)題比vue優(yōu)雅而被人認(rèn)可,但也更需要團(tuán)隊(duì)技術(shù)整體比較給力,領(lǐng)頭大佬的設(shè)計(jì)與把關(guān)能力要更優(yōu)秀,因此開(kāi)發(fā)成本更大,下面文章就來(lái)詳細(xì)介紹,需要的朋友可以參考下
    2021-09-09
  • vue路由教程之靜態(tài)路由

    vue路由教程之靜態(tài)路由

    這篇文章主要給大家介紹了關(guān)于vue路由教程之靜態(tài)路由的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 如何持久化存儲(chǔ)你的Pinia狀態(tài)

    如何持久化存儲(chǔ)你的Pinia狀態(tài)

    createPersistedState是Pinia插件,用于持久化存儲(chǔ)狀態(tài)數(shù)據(jù),通過(guò)localStorage/sessionStorage實(shí)現(xiàn)頁(yè)面刷新后數(shù)據(jù)保留,適用于登錄信息、主題設(shè)置等場(chǎng)景,需在main.ts注冊(cè)并配置store開(kāi)啟
    2025-07-07
  • vue+springboot實(shí)現(xiàn)登錄功能

    vue+springboot實(shí)現(xiàn)登錄功能

    這篇文章主要為大家詳細(xì)介紹了vue+springboot實(shí)現(xiàn)登錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Vue3實(shí)現(xiàn)簡(jiǎn)約型側(cè)邊欄的示例代碼

    Vue3實(shí)現(xiàn)簡(jiǎn)約型側(cè)邊欄的示例代碼

    本文主要介紹了Vue3實(shí)現(xiàn)簡(jiǎn)約型側(cè)邊欄的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • vue el-select綁定對(duì)象時(shí),回顯內(nèi)容不正確,始終是最后一項(xiàng)的解決

    vue el-select綁定對(duì)象時(shí),回顯內(nèi)容不正確,始終是最后一項(xiàng)的解決

    這篇文章主要介紹了vue el-select綁定對(duì)象時(shí),回顯內(nèi)容不正確,始終是最后一項(xiàng)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • nuxt 路由、過(guò)渡特效、中間件的實(shí)現(xiàn)代碼

    nuxt 路由、過(guò)渡特效、中間件的實(shí)現(xiàn)代碼

    這篇文章主要介紹了nuxt 路由、過(guò)渡特效、中間件的實(shí)現(xiàn)代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Vue組件化開(kāi)發(fā)的必備技能之組件遞歸

    Vue組件化開(kāi)發(fā)的必備技能之組件遞歸

    組件是可以在它們自己的模板中調(diào)用自身的,不過(guò)它們只能通過(guò)?name?選項(xiàng)來(lái)做這件事,下面這篇文章主要給大家介紹了關(guān)于Vue組件化開(kāi)發(fā)的必備技能之組件遞歸的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • 一文帶你重新學(xué)習(xí)Vue中的按鍵監(jiān)聽(tīng)和鼠標(biāo)監(jiān)聽(tīng)

    一文帶你重新學(xué)習(xí)Vue中的按鍵監(jiān)聽(tīng)和鼠標(biāo)監(jiān)聽(tīng)

    這篇文章主要為大家詳細(xì)介紹了Vue中的按鍵監(jiān)聽(tīng)和鼠標(biāo)監(jiān)聽(tīng)的常見(jiàn)實(shí)現(xiàn)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-07-07
  • 解決vue中axios設(shè)置超時(shí)(超過(guò)5分鐘)沒(méi)反應(yīng)的問(wèn)題

    解決vue中axios設(shè)置超時(shí)(超過(guò)5分鐘)沒(méi)反應(yīng)的問(wèn)題

    這篇文章主要介紹了解決vue中axios設(shè)置超時(shí)(超過(guò)5分鐘)沒(méi)反應(yīng)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09

最新評(píng)論

南宫市| 原阳县| 贺兰县| 昂仁县| 昆明市| 华容县| 织金县| 博乐市| 汉寿县| 天长市| 鄄城县| 大渡口区| 句容市| 溧阳市| 嘉祥县| 濉溪县| 垦利县| 喀什市| 郴州市| 诸城市| 晋州市| 长寿区| 洛川县| 黄冈市| 鄂托克前旗| 东至县| 上蔡县| 页游| 新民市| 册亨县| 离岛区| 伊春市| 朝阳区| 安龙县| 石河子市| 来凤县| 景德镇市| 米易县| 钦州市| 德江县| 怀仁县|