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

從Element日期組件源碼中學到的兩個工具方法技巧

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

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

獲取當前日期的前一天,后一天

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);
};

這里獲取當前日期的前一天用的是 date.getDate() - 1 而不是 date.getTime() - 24 * 60 * 60 * 1000 是為了避免在夏令時轉換時導致的錯誤。

在某些國家,比如英國,每年都會實行夏令時制。

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

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

所以在夏令時起止當天如果用 date.getTime() (+)- 24 * 60 * 60 * 1000 獲取前一天后一天可能會導致錯誤。

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

Element 的做法是利用 Function.prototype.apply 的第二個參數可以是類數組對象來實現(xiàn);

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

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

還有很多種實現(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() 可以通過 可迭代對象 和 類數組對象(帶有 length 屬性和索引元素的對象) 來創(chuàng)建數組;
并且如果 類數組對象 只有length屬性沒有索引元素,那么創(chuàng)建的數組值都為 undefined 參考

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

第三種方法,第三個參數是一個函數,會被 Number.call 當作 this 調用

(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() 類似,Array(N).fill() 也會創(chuàng)建 N 個值為 undefined 的數組;

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

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

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

(6)擴展運算符

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

[...Array(N)] 擴展運算符會將空槽元素轉化為 undefined

(7)Uint8Array

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

性能

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

結果如下

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

參考資料

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

相關文章

  • vue與react詳細

    vue與react詳細

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

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

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

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

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

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

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

    Vue3實現(xiàn)簡約型側邊欄的示例代碼

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

    vue el-select綁定對象時,回顯內容不正確,始終是最后一項的解決

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

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

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

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

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

    一文帶你重新學習Vue中的按鍵監(jiān)聽和鼠標監(jiān)聽

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

    解決vue中axios設置超時(超過5分鐘)沒反應的問題

    這篇文章主要介紹了解決vue中axios設置超時(超過5分鐘)沒反應的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評論

丰镇市| 西畴县| 永靖县| 苏尼特右旗| 大洼县| 家居| 五华县| 定襄县| 潼关县| 新泰市| 上犹县| 印江| 襄樊市| 原平市| 连江县| 芦山县| 疏附县| 辽源市| 临颍县| 壤塘县| 临夏县| 虞城县| 惠来县| 克东县| 聊城市| 平遥县| 准格尔旗| 新邵县| 新野县| 崇左市| 彩票| 壶关县| 肇东市| 仪征市| 诸暨市| 新昌县| 东乌珠穆沁旗| 钟山县| 吉木萨尔县| 广河县| 三亚市|