工具【1、計算時間差2、獲取當天時間前后七天時間3、根據當前數據的位置,在數組中插入數據4、數組中,某個屬性相同的數據放在一塊,如把某個日期相同的相連一起】

生成UUID

/*** 唯一的隨機字符串,用來區分每條數據* @returns {string}*/
export function getUid() {return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {const r = (Math.random() * 16) | 0;const v = c === 'x' ? r : (r & 0x3) | 0x8;return v.toString(16);});
}

計算時間差

/*** 計算時間差* @param {String} beginTime :2022-01-13* @param {String} endTime :2022-01-13* @returns {{hours: number, seconds: number, minutes: number, day: number}}*/
export function dealTime(beginTime, endTime) {let dateBegin = beginTime ? new Date(beginTime) : new Date();let dateEnd = endTime ? new Date(endTime) : new Date();let dateDiff = dateEnd.getTime() - dateBegin.getTime(); //時間差的毫秒數let day = Math.floor(dateDiff / (24 * 3600 * 1000)); //計算出相差天數let leave1 = dateDiff % (24 * 3600 * 1000); //計算天數后剩余的毫秒數let hours = Math.floor(leave1 / (3600 * 1000)); //計算出小時數//計算相差分鐘數let leave2 = leave1 % (3600 * 1000); //計算小時數后剩余的毫秒數let minutes = Math.floor(leave2 / (60 * 1000)); //計算相差分鐘數//計算相差秒數let leave3 = leave2 % (60 * 1000); //計算分鐘數后剩余的毫秒數let seconds = Math.round(leave3 / 1000);return {day,hours,minutes,seconds}
}

獲取當天時間

/*** 獲取當天時間* @returns {string}*/
export function getCurDay() {let datetime = new Date();let year = datetime.getFullYear();let month = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1;let date = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate();return `${year}-${month}-${date}`
}

日期格式處理

/*** 日期格式處理* @param date* @returns {{month: string, year: string, day: string}}*/
export function formatDate(date) {let year = date.getFullYear();let months = date.getMonth() + 1;let month = (months < 10 ? '0' + months : months).toString();let day = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()).toString();return {year: year.toString(),month,day}
}

獲取當前天時間

/*** 獲取當前天時間* @param {String} target* @param {String} param 【Y:年;M:月;D:日;h:小時;m:分鐘;s:秒;】 默認精確到秒* @returns {string}*/
export function getCurrentDate(target, param = 's') {let now = target ? new Date(target) : new Date();let year = now.getFullYear(); //得到年份let month = now.getMonth();//得到月份let date = now.getDate();//得到日期let day = now.getDay();//得到周幾let hour = now.getHours();//得到小時let minu = now.getMinutes();//得到分鐘let sec = now.getSeconds();//得到秒month = month + 1;if (month < 10) month = "0" + month;if (date < 10) date = "0" + date;if (hour < 10) hour = "0" + hour;if (minu < 10) minu = "0" + minu;if (sec < 10) sec = "0" + sec;const arr = {'Y': year,'M': year + "-" + month,'D': year + "-" + month + "-" + date,'h': year + "-" + month + "-" + date + " " + hour,'m': year + "-" + month + "-" + date + " " + hour + ":" + minu,'s': year + "-" + month + "-" + date + " " + hour + ":" + minu + ":" + sec}return arr[param];
}

獲取當天時間前后七天時間

/*** 獲取當天時間前后七天時間* @param {number} day day>0 當天時間的后幾天 day<0 當天時間前幾天* @returns {string}*/
export function getRecentDate(day) {let date1 = new Date(),time1 = date1.getFullYear() + "-" + (date1.getMonth() + 1) + "-" + date1.getDate();//time1表示當前時間let date2 = new Date(date1);date2.setDate(date1.getDate() + day);const y = date2.getFullYear();const m = (date2.getMonth() + 1) > 9 ? (date2.getMonth() + 1) : '0' + (date2.getMonth() + 1)const d = date2.getDate() > 9 ? date2.getDate() : '0' + date2.getDate()return y + "-" + m + "-" + d;
}

數組中,某個屬性相同的數據放在一塊,如把某個日期相同的相連一起

/*** 數組中,某個屬性相同的數據放在一塊,如把某個日期相同的相連一起* @param {Object[]} list 傳入的數組* @param {String} prop 那個屬性相同的數據* @returns {*[]}*/
export function margePropData(list = [], prop) {let arr = [], tempArr = {};list.forEach(item => {if (!tempArr[item[prop]]) {tempArr[item[prop]] = [item]} else {tempArr[item[prop]].push(item)}})for (const tempArrKey in tempArr) {arr = [...arr, ...tempArr[tempArrKey]]}return arr
}

合并行

/*** 合并行* @param {Object[]} list* @param {String} prop*/
export function mergeRows(list = [], prop) {list.forEach(ele => {ele.rowspan = 1})const len = list.lengthfor (let i = 0; i < len; i++) {for (let j = i + 1; j < len; j++) {if (list[i][prop] === list[j][prop]) {list[i].rowspan++list[j].rowspan--}}// 這里跳過已經重復的數據i = i + list[i].rowspan - 1}return list
}

根據當前數據的位置,在數組中插入數據

/*** 根據當前數據的位置,在數組中插入數據* 如數組【1,2,4,5】想要在2后面插入3,*1:首先獲取到2的下標,*2:然后獲取要插入之前的數據,獲取要插入之后的數據,中間就是插入的位置*3:最后把這三個按順序合并就得到在想要的位置插入數據* @param {number[]|Object[]} list* @param {number} index* @param {Object} target*/
export function insertArrPositionOfIndex(list = [], index = 0, target = {}) {//根據index 找出小于index的數據放在左邊const leftList = list.filter((t, i) => i < index);//根據index 找出大于index的數據放在右邊const rightList = list.filter((t, i) => i >= index);// 最終合并數據return [...leftList, target, ...rightList]
}

獲取元素下標

/*** 獲取元素下標* @param {number} dir 為 1:得到正序遍歷方法;為 -1: 得到逆序遍歷方法。* @returns {(function(*, *, *=): (number|number|number))|*}*/
export function findArrIndex(dir = 1) {return function (array, cb, context) {let length = array.length;// 控制初始 index,0 或者 length-1let index = dir >= 0 ? 0 : length - 1;// 條件: 在數組范圍內;// 遞增或遞減:遞加 1 或者 -1; 妙啊~for (; index >= 0 && index <= length - 1; index += dir) {if (cb.call(context, array[index], index)) return index}return -1}
}

map轉換成數組

/*** map轉換成數組* @param {Object} target* @returns {*[]}* @constructor*/
export function MapConvertArr(target = {}) {let list = [];for (let key in target) {list.push(target[key]);}return list;
}

對象數組去重

/*** 對象數組去重* @param {Object[]} arr 數組* @param {String} prop 根據什么字段去重* @returns {any[]}*/
export function arrayDeduplication(arr, prop) {let map = new Map();return arr.filter(item => !map.has(item[prop]) && map.set(item[prop], 1));
}

防抖

/*** 防抖* @param {function} fn* @param {number} duration* @returns {(function(...[*]): void)|*}* @constructor*/
export function MyDebounce(fn, duration = 100) {let timer = nullreturn (...args) => {clearTimeout(timer)timer = setTimeout(() => {fn(...args);}, duration)}
}

節流

/*** 節流* @param fn* @param {number} duration* @returns {(function(...[*]): (boolean|undefined))|*}* @constructor*/
export function MyThrottle(fn, duration = 100) {let target = true;return (...arg) => {if (!target) {return false;}target = false;setTimeout(() => {fn(...arg);target = true}, duration)}
}

單例模式

/*** 單例模式* @param {Object} className* @returns {*}*/
export function singleton(className) {let ins;return new Proxy(className, {construct(target, args) {if (!ins) {ins = new target(...args)}return ins;}})
}

校驗規則 表單提交校驗

/*** 校驗規則* @param {Object[]} list* @param {Object[]} require* @returns {null}*/
export function verifyRules(list = [], require = []) {let message = nullfor (const key of require) {const isEmpty = list.every(it => !it[key.prop])if (isEmpty) {message = key.messagebreak;}}return message
}

輸入框校驗

  • 校驗輸入最大數字長度
  • 校驗保留幾位小數
  • 校驗手機號
  • 校驗郵箱
  • 校驗身份證
/**** @param target {*} 傳入的值* @param rule {String} 需要檢驗的類型 num_2:輸入數字范圍,1表示可輸入最大值9,2:表示可輸入最大值為99,以此類推,;decimal_2:保留小數位,1表示留一位,2表示留兩位小數 ;phone校驗手機 ;email:校驗郵箱 ;IDCard:校驗身份證* @param reg {RegExp} 正則* @returns {*|boolean}*/
export function regInput(target, rule = 'num_5', reg) {//校驗輸入最大數字長度if (rule.includes('num_')) {const endNum = rule.split("_")[1];target = target.replace(/[^\d.]/g, "").replace(".", "");if (endNum < 1) {throw new Error(`規則:${rule}最小為1`)}reg = reg || new RegExp(`^[1-9]\\d{0,${(+endNum - 1)}}$`);if (reg.test(target)) {return target;}return target.slice(0, endNum);}//校驗保留幾位小數else if (rule.includes('decimal_')) {//清除非數字和小數點的字符target = target.replace(/[^\d.]/g, "");//只保留第一個小數點,清除多余的小數點target = target.replace(/\.{2,}/g, "").replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");const endDecimal = rule.split("_")[1];//只保留幾位小數let regStr = ''for (let i = 0; i < endDecimal; i++) {regStr += '\\d';}reg = reg || new RegExp(`^(\\-)*(\\d+)\\.(${regStr}).*$`)if (endDecimal > 0) {return target.replace(reg, '$1$2.$3')} else {return target.replace(/^(\-)*(\d+).*$/, '$1$2');}}//校驗手機號else if (rule.includes('phone')) {reg = reg || /^1[3456789]\d{9}$/;return reg.test(target);}//校驗郵箱else if (rule.includes('email')) {reg = reg || /^\w+[@]\w{2,5}([.]\w{2,3}){1,3}$/i;return reg.test(target);}//校驗身份證else if (rule.includes('IDCard')) {reg = reg || /^[1-9]\d{5}(19\d{2}|20\d{2})(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}(\d|x|X)$/;if (reg.test(target)) {// 校驗碼校驗let idCard_array = target.split("");let factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];let checkCode = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"];let checkSum = 0;for (let i = 0; i < factor.length; i++) {checkSum += factor[i] * parseInt(idCard_array[i]);}let mod = checkSum % 11;return checkCode[mod] === idCard_array[17].toLowerCase();}return false;}return target;}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164024.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164024.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164024.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【圖文詳解】SiamFC++與圖注意力的強強聯合:單目標追蹤系統

1.研究背景與意義 隨著計算機視覺技術的不斷發展&#xff0c;單目標追蹤&#xff08;Single Object Tracking, SOT&#xff09;作為計算機視覺領域的一個重要研究方向&#xff0c;已經在許多實際應用中得到了廣泛的應用。單目標追蹤系統可以通過分析視頻序列中的目標運動&…

服務器流量包扣減規則

服務器買的流量包,一般指的是上行帶寬,下行通常是不限的 上行和下行是針對服務器而言的 客戶端上傳文件給服務器,對服務器而言它是在下載,所以對服務器而言他是用的下行帶寬(下行流量) 客戶端從服務器下載文件,對服務器而言它是在上傳,所以對服務器而言他是用的上行帶寬(上行…

大數據量條件SQL查詢內存處理方案以及數據過濾算法優化

MySQL是一個廣泛使用的關系型數據庫管理系統。通過SQL語言進行數據操作和查詢&#xff0c;還支持多用戶、多線程和分布式操作等功能。 在實際使用中&#xff0c;我們會遇到各種查詢條件&#xff0c;如字段名、表名、邏輯運算符、比較運算符、函數等。其中&#xff0c;有些查詢…

淺析智慧社區建設趨勢及AI大數據監管平臺方案設計

一、背景與需求 伴隨著社會與經濟的發展&#xff0c;人們對生活質量的要求越來越高&#xff0c;與此同時&#xff0c;新興技術的進步也促進了智慧社區市場的逐步成熟。智慧社區是社區管理的一種新理念&#xff0c;是新形勢下城市與社會管理的一種創新模式。 在上海、杭州、深…

在.bashrc文件修改環境變量的做法

作者&#xff1a;朱金燦 來源&#xff1a;clever101的專欄 為什么大多數人學不會人工智能編程&#xff1f;>>> ~/.bashrc文件是linux下保存環境變量的系統文件。原以為使用sed命令修改.bashrc文件&#xff0c;實際上不行&#xff0c;需要使用echo命令。具體示例如下…

02-詳細介紹Java8新特性方法引用,構造引用,數組引用

方法/構造/數組引用 方法引用 當要傳遞給Lambda體的操作已經有實現的方法時就可以使用方法引用,方法引用和構造器引用就是為了簡化Lambda表達式 方法引用可以看做是Lambda表達式深層次的表達,方法引用本質還是Lambda表達式所以也是函數式接口的一個實例通過方法的名字來指向…

小紅書關鍵詞搜索商品列表API接口(分類ID搜索商品數據接口,商品詳情接口)演示案例

通過關鍵詞搜索商品API接口&#xff0c;電商平臺可以為消費者提供一個簡單、快捷的商品搜索功能。用戶只需輸入關鍵詞&#xff0c;就可以得到與該關鍵詞相關的商品列表。關鍵詞搜索商品API接口還可以提供給第三方開發者一個便捷的商品搜索服務。開發者可以利用該接口&#xff0…

Mac安裝配置typescript及在VSCode上運行ts

一、Mac上安裝typescript sudo npm install -g typescript 測試一下&#xff1a;出現Version則證明安裝成功 tsc -v 二、在VSCode上運行 新建一個xxx.ts文件&#xff0c;測試能否運行 console.log("helloworld") 運行報錯&#xff1a;ts-node: command not…

后滲透持久性-– 服務控制管理器

執行以下命令將快速檢索服務控制管理器實用程序的 SDDL 權限。 sc sdshow scmanager服務控制管理器 – 安全描述符 PowerShell 還可用于枚舉所有用戶組的 SDDL 權限并將其轉換為可讀格式。 $SD Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\Schedule\S…

shell 條件語句 if case

目錄 測試 test測試文件的表達式 是否成立 格式 選項 比較整數數值 格式 選項 字符串比較 常用的測試操作符 格式 邏輯測試 格式 且 &#xff08;全真才為真&#xff09; 或 &#xff08;一真即為真&#xff09; 常見條件 雙中括號 [[ expression ]] 用法 &…

美國服務器在大陸連不上怎么回事?

?  在租用任何美國服務器之前&#xff0c;都需要先搞清楚一些使用問題&#xff0c;畢竟服務器能夠不間斷地訪問也是站在們所期望的。但有時&#xff0c;美國服務器網站或許也會突然出現在大陸打不開的情況&#xff0c;在面臨這種情況時&#xff0c;我們應該怎么做? 查看連不…

【史上最細教程】服務器MySQL數據庫完成主從復制

文章目錄 MySQL完成主從復制教程準備&#xff1a;原理&#xff1a;步驟&#xff1a; 推薦文章 MySQL完成主從復制教程 主從復制&#xff08;也稱 AB 復制&#xff09;就是將一個服務器&#xff08;主服務器&#xff09;的數據復制到一個或多個MySQL數據庫服務器&#xff08;從…

Java飛翔的鳥

創建三個包&#xff0c;存放代碼。把圖片放進文件中 APP包&#xff08;運行&#xff09; GameApp類 package APP; import mian.GameFrame;public class GameApp {public static void main(String[] args) {new GameFrame();} } mian包&#xff08;主內容&#xff09; Barri…

python獲取json所有節點和子節點

使用python獲取json的所有父結點和子節點 并使用父節點加下劃線命名子節點 先展示一段json代碼 {"level1": {"level2": {"level3": [{"level4": "4value"},{"level4_2": "4_2value"}]},"level2_…

電力行業的智能調度:數字孿生技術

隨著科技的發展&#xff0c;數字孿生技術正逐漸滲透到各個行業領域&#xff0c;其中包括電力行業。數字孿生技術為電力行業帶來了前所未有的機遇&#xff0c;使得電力系統的運行更加高效、安全和可持續。本文借用山海鯨可視化軟件幾個電力行業數字孿生案例探討數字孿生技術在電…

介紹幾種Go語言開發的IDE

文章目錄 1.前言2.幾種ide2.1 Goland2.2 VsCode示例 2.3 LiteIDE2.4 Eclipse插件GoClipse2.5 Atom2.6 Vim2.7 Sublime Text 3.總結寫在最后 1.前言 Go語言作為一種新興的編程語言&#xff0c;近年來受到了越來越多的關注。 它以其簡潔、高效和并發性能而聞名&#xff0c;被廣…

Jmeter 壓測保姆級入門教程

1、Jmeter本地安裝 1.1、下載安裝 軟件下載地址&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/apache/jmeter/binaries/ 選擇一個壓縮包下載即可 然后解壓縮后進入bin目錄直接執行命令jmeter即可啟動 1.2 修改語言 默認是英文的&#xff0c;修改中文&#xff0c;點擊…

關于解決C# WinForm中Chart控件增刪數據時報錯的解決方法

1.報錯代碼 System.InvalidOperationExceptionHResult=0x80131509Message=集合已修改;可能無法執行枚舉操作。具體報錯表現為,在Application.Run(Form1())中斷。 2.解決方法 這個錯誤通常是由于在枚舉集合時對集合進行了修改而引起的。在修改完chart控件中的內容后,可能會…

Linux---常用命令匯總

文章目錄 關于目錄操作的命令ls/llcdpwdmkdir 關于文件操作的命令touchechocatrmmvcpvim 關于查詢操作的命令greppsnetstat 關于目錄操作的命令 ls/ll ls : 列出當前目錄下的目錄和文件&#xff08;以行的展示形式&#xff09; ll &#xff1a; 列出當前目錄下的目錄和文件&…

Django之Cookie與Session,CBV加裝飾器

前言 會話跟蹤技術 在一個會話的多個請求中共享數據&#xff0c;這就是會話跟蹤技術。例如在一個會話中的請求如下&#xff1a; ? 請求銀行主頁&#xff1b; 請求登錄&#xff08;請求參數是用戶名和密碼&#xff09;&#xff1b;請求轉賬&#xff08;請求參數與轉賬相關的數…