1. 程式人生 > >封裝一個常用的js工具類

封裝一個常用的js工具類

/**
 * @author:水痕
 * @timer:2016-07-28
 * @email:[email protected]
 * @version:1.0
 * @title:封裝一個自己常用的工具類js
 * @note:
 */
;
(function(window, document, $) {
    window.utils = {
            /////////////////////////////關於陣列操作js開始/////////////////////////////////////
            tmArray: {
                /*each和map的功能是一樣的*/
                each: function(arr, fn) {
                    fn = fn || Function
; var a = []; var args = Array.prototype.slice.call(arguments, 1); for(var i = 0; i < arr.length; i++) { var res = fn.apply(arr, [arr[i], i].concat(args)); if(res != null) a.push(res); } return
a; }, /*each和map的功能是一樣的*/ map: function(arr, fn, thisObj) { var scope = thisObj || window; var a = []; for(var i = 0, j = arr.length; i < j; ++i) { var res = fn.call(scope, arr[i], i, this
); if(res != null) a.push(res); } return a; }, /** * 陣列的排序 * @param array * @param sortFlag * @returns {*} */ orderBy: function(array, sortFlag) { var $arr = array; if(sortFlag == 'asc') { $arr.sort(this._numAscSort); } else if(sortFlag == 'desc') { $arr.sort(this._numDescSort); } else { $arr.sort(this._numAscSort); } return $arr; }, // 求兩個集合的並集 union: function(a, b) { var newArr = a.concat(b); return this.unique2(newArr); }, // 求兩個集合的補集 complement: function(a, b) { return this.minus(this.union(a, b), this.intersect(a, b)); }, // 求兩個集合的交集 intersect: function(a, b) { a = this.unique(a); return this.each(a, function(o) { return b.contains(o) ? o : null; }); }, //求兩個集合的差集 minus: function(a, b) { a = this.unique(a); return this.each(a, function(o) { return b.contains(o) ? null : o; }); }, /** * 陣列的去重 * @param arr * @returns {Array} */ unique: function(arr) { var ra = new Array(); for(var i = 0; i < arr.length; i++) { if(!ra.contains(arr[i])) { //if(this.contains(ra,arr[i])){ ra.push(arr[i]); } } return ra; }, /** * 陣列的去重複 * @param arr * @returns {*} */ unique2: function(arr) { for(var i = 0; i < arr.length; i++) { for(var j = i + 1; j < arr.length;) { if(arr[j] == arr[i]) { arr.splice(j, 1); } else { j++; } } } return arr; }, /** * 陣列去除重複的(根據物件來) * @param {Object} ary */ unique3: function(ary) { var result = [], hash = {}; for(var i = 0, elem; (elem = arr[i]) != null; i++) { if(!hash[elem]) { result.push(elem); hash[elem] = true; } } return result; }, /** * 獲取陣列的下標 * @param arr * @param val * @returns {number} */ indexOf: function(arr, val) { for(var i = 0; i < arr.length; i++) { if(arr[i] == val) { return i; } } return -1; }, /** * 判斷一個元素是否在一個數組中 * @param arr * @param val * @returns {boolean} */ contains: function(arr, val) { return this.indexOf(arr, val) != -1 ? true : false; }, /** * 陣列中刪除一個元素 * @param arr * @param indexs * @returns {*} */ remove: function(arr, indexs) { var index = this.indexOf(arr, indexs); if(index > -1) { arr.splice(index, 1); } return arr; }, removeObject: function(arr, item) { for(var i = 0; i < arr.length; i++) { var jsonData = arr[i]; for(var key in jsonData) { if(jsonData[key] == item) { arr.splice(i, 1); } } } return arr; }, /** * 求陣列中最大值 * @param arr * @returns {number|Number} */ arrMax: function(arr) { return Math.max.apply(null, arr); }, /** * 求陣列中最小值 * @param arr * @returns {number|Number} */ arrMin: function(arr) { return Math.min.apply(null, arr); }, /** * 刪除陣列元素的方法 */ removeAry: function(ary, ele) { ary.splice(ary.indexOf(ele), 1); }, /** * 將類陣列轉換為陣列的方法 * @param ary * @returns {Array} */ formArray: function(ary) { var arr = []; if(Array.isArray(ary)) { arr = ary; } else { arr = Array.prototype.slice.call(ary); }; return arr; }, /** * 定義一個數組排序的方法 * 預設為升序排序asc, * 如果傳遞是引數是一個的話,那麼就是是升序,如果傳遞的引數是兩個的話,如果第一個引數不能轉換為陣列的話,也直接退出 * 引數:acs:表示升序 * 引數:desc:表示降序 * @returns {*} */ arrySort: function() { var arg = arguments; var len = arg.length; var ary = this.arryList(arg[0]); //如果沒傳遞引數,或者傳遞的不能轉換為陣列的話就直接返回 if(!len || Array.isArray(ary) == false) { return false; }; if(len == 1) { return ary.sort(function(a, b) { return a - b; }); } else { return ary.sort(function(a, b) { if(arg[1] == "desc") { return b - a; } else if(arg[1] == "asc") { return a - b; } else { return a - b; }; }); }; }, /** * 求和函式 * @param arr * @returns {number} */ arySum: function(arr) { var ary = []; var result = 0; if(arr instanceof Array) { ary = arr; } else { ary = this.formArray(arr); }; for(var i = 0; i < ary.length; i++) { result += parseFloat(ary[i]); }; return result; }, /** * 陣列隨機排列 * @param {Object} ary */ shuffle: function(ary) { var input = this; for(var i = input.length - 1; i >= 0; i--) { var randomIndex = Math.floor(Math.random() * (i + 1)); var itemAtIndex = input[randomIndex]; input[randomIndex] = input[i]; input[i] = itemAtIndex; } return input; }, /** * 陣列隨機排序 * @param {Object} target */ shuffle1: function(target) { function randomsort(a, b) { return Math.random() > .5 ? -1 : 1; //用Math.random()函式生成0~1之間的隨機數與0.5比較,返回-1或1 } return target.sort(randomsort); }, /** * 判斷是不是陣列 * @param {Object} ary */ isArray: function(ary) { var objectToStringFn = Object.prototype.toString; var arrayToStringResult = objectToStringFn.call([]); return function(subject) { return objectToStringFn.call(subject) === arrayToStringResult; }; }, /** * 隨機返回陣列中一個元素 * @param {Object} ary */ randomItem: function(ary) { return ary[Math.ceil(Math.random() * ary.length)]; }, /** * 判斷陣列中是否包含某一項 * @param arr * @returns {number|Number} * 呼叫方法:var max = utils.arrContains([],"",false) flag 如果為true,則判斷字串 false則判斷字元 */ arrContains: function(arr, str, flag) { if(flag) { if(arr.length > 0 && this.isNotEmpty(str)) { for(var i = 0; i < arr.length; i++) { if(arr[i] == str) { return true; } else { return false; } } } } else { for(var i = 0; i < arr.length; i++) { for(var j = 0; j < arr[i].length; j++) { if(arr[i].charAt(j) == str) { return true; } else { false; } } } } }, /** * 判斷陣列是否有重複的項 * @param {Object} arr */ isRepeat: function(arr) { //arr是否有重複元素 var hash = {}; for(var i in arr) { if(hash[arr[i]]) return true; hash[arr[i]] = true; } return false; }, _numAscSort: function(a, b) { return a - b; }, _numDescSort: function(a, b) { return b - a; }, _sortAsc: function(x, y) { if(x > y) { return 1; } else { return -1; } }, _sortDesc: function(x, y) { if(x > y) { return -1; } else { return 1; } } }, /////////////////////////////關於陣列操作js結束///////////////////////////////////// /////////////////////////////關於日期操作js開始///////////////////////////////////// tmDate: { /*轉換日期*/ _transferDate: function(date) { if(typeof date == "string") { return new Date(date.replace(/-/ig, "/")); } else { return date; } }, /*格式化日期*/ _toString: function(date, pattern) { var d = this._transferDate(date); return d.format(pattern); }, /*獲取兩個時間相減的時間*/ _Date: function(date1, date2) { var dateTime = this._numMillSecond(date1, date2); return new Date(dateTime).format("yyyy-MM-dd"); }, //間隔年份 _numYear: function(date1, date2) { var times = this._numDay(date1, date2); return Math.floor(times / 365); }, //間隔月份 _numMonth: function(date1, date2) { var times = this._numDay(date1, date2); return Math.floor(times / 30); }, //間隔天數 _numDay: function(date1, date2) { var times = this._numSecond(date1, date2); var hour = this._var().hour; var mills = this._var().mills; return Math.ceil(times / (mills * hour)); }, //間隔時 _numHour: function(date1, date2) { return Math.floor(this._numMillSecond(date1, date2) / (1000 * 60 * 60)); }, //間隔分 _numMinute: function(date1, date2) { return Math.floor(this._numMillSecond(date1, date2) / (1000 * 60)); }, //間隔秒數 _numSecond: function(date1, date2) { return Math.floor(this._numMillSecond(date1, date2) / 1000); }, //間隔毫秒 _numMillSecond: function(date1, date2) { var stimes = this._getTime(this._transferDate(date1)); var etimes = this._getTime(this._transferDate(date2)); return etimes - stimes; }, _var: function() { return { hour: 24, second: 60, mills: 3600, format: "yyyy-MM-dd", dateFormat: "yyyy-MM-dd HH:mm:ss" }; }, /*某個日期加上多少毫秒*/ _plusMillisSeconds: function(date, millisSeconds) { var dateTime = this._getTime(date); var mintimes = millisSeconds; var rdate = dateTime * 1 + mintimes * 1; return this._format(new Date(rdate)); }, /*某個日期加上多少秒*/ _plusSeconds: function(date, seconds) { var dateTime = this._getTime(date); var mintimes = seconds * 1000; var rdate = dateTime * 1 + mintimes * 1; return this._format(new Date(rdate)); }, /*某個日期加上多少分鐘*/ _plusMinutes: function(date, minutes) { var dateTime = this._getTime(date); var mintimes = minutes * 60 * 1000; var rdate = dateTime * 1 + mintimes * 1; return this._format(new Date(rdate)); }, /*某個日期加上小時數*/ _plusHours: function(date, hours) { var dateTime = this._getTime(date); var mintimes = hours * 60 * 60 * 1000; var rdate = dateTime + mintimes; return this._format(new Date(rdate)); }, /*某個日期加上天數*/ _plusDays: function(date, days) { var dateTime = this._getTime(date); var mintimes = days * 60 * 60 * 1000 * 24; var rdate = dateTime * 1 + mintimes * 1; return this._format(new Date(rdate)); }, /*某個日期加上多少個月,這裡是按照一個月30天來計算天數的*/ _plusMonths: function(date, months) { var dateTime = this._getTime(date); var mintimes = months * 30 * 60 * 60 * 1000 * 24; var rdate = dateTime + mintimes * 1; return this._format(new Date(rdate)); }, /*某個日期加上多少個年,這裡是按照一個月365天來計算天數的,如果loop為true則按閏年計算*/ _plusYears: function(date, years, isLoop) { var dateTime = this._getTime(date); var day = 365; if(isLoop) day = 366; var mintimes = years * day * 60 * 60 * 1000 * 24; var rdate = dateTime + mintimes; return this._format(new Date(rdate)); }, /*某個日期加上某個日期,這樣的操作視乎沒什麼意義*/ _plusDate: function(date1, date2) { var dateTime = this._getTime(date1); var dateTime2 = this._getTime(date2);; var rdate = dateTime + dateTime2; return this._format(new Date(rdate)); }, /*某個日期減去多少毫秒秒*/ _minusMillisSeconds: function(date, millisSeconds) { var dateTime = this._getTime(date); var mintimes = millisSeconds * 1; var rdate = dateTime - mintimes; return this._format(new Date(rdate)); }, /*某個日期減去多少秒*/ _minusSeconds: function(date, seconds) { var dateTime = this._getTime(date); var mintimes = seconds * 1000; var rdate = dateTime - mintimes; return this._format(new Date(rdate)); }, /*某個日期減去多少分鐘*/ _minusMinutes: function(date, minutes) { var dateTime = this._getTime(date); var mintimes = minutes * 60 * 1000; var rdate = dateTime - mintimes; return this._format(new Date(rdate)); }, /*某個日期減去小時數*/ _minusHours: function(date, hours) { var dateTime = this._getTime(date); var mintimes = hours * 60 * 60 * 1000; var rdate = dateTime - mintimes; return this._format(new Date(rdate)); }, /*某個日期減去天數*/ _minusDays: function(date, days) { var dateTime = this._getTime(date); var mintimes = days * 60 * 60 * 1000 * 24; var rdate = dateTime - mintimes; return this._format(new Date(rdate)); }, /*某個日期減去多少個月,這裡是按照一個月30天來計算天數的*/ _minusMonths: function(date, months) { var dateTime = this._getTime(date); var mintimes = months * 30 * 60 * 60 * 1000 * 24; var rdate = dateTime - mintimes; return this._format(new Date(rdate)); }, /*某個日期減去多少個年,這裡是按照一個月365天來計算天數的*/ _minusYears: function(date, years, isLoop) { var dateTime = this._getTime(date); var day = 365; if(isLoop) day = 366; var mintimes = years * day * 60 * 60 * 1000 * 24; var rdate = dateTime - mintimes; return this._format(new Date(rdate)); }, /*某個日期減去某個日期,這樣的操作視乎沒什麼意義*/ _minusDate: function(date1, date2) { var dateTime = this._getTime(date1); var dateTime2 = this._getTime(date2);; var rdate = dateTime - dateTime2; return this._format(new Date(rdate)); }, /*獲取一個月有多少天*/ _getMonthOfDay: function(date1) { var currentMonth = this._getFirstDayOfMonth(date1); var nextMonth = this._getNextDayOfMonth(date1); return this._numDay(currentMonth, nextMonth); }, /*獲取一年又多少天*/ _getYearOfDay: function(date) { var firstDayYear = this._getFirstDayOfYear(date); var lastDayYear = this._getLastDayOfYear(date); return Math.ceil(this._numDay(firstDayYear, lastDayYear)); }, /*某個日期是當年中的第幾天*/ _getDayOfYear: function(date1) { return Math.ceil(this._numDay(this._getFirstDayOfYear(date1), date1)); }, /*某個日期是在當月中的第幾天*/ _getDayOfMonth: function(date1) { return Math.ceil(this._numDay(this._getFirstDayOfMonth(date1), date1)); }, /*獲取某個日期在這一年的第幾周*/ _getDayOfYearWeek: function(date) { var numdays = this._getDayOfYear(date); return Math.ceil(numdays / 7); }, /*某個日期是在當月中的星期幾*/ _getDayOfWeek: function(date1) { return this._getWeek(date1); }, /*獲取在當前日期中的時間*/ _getHourOfDay: function(date) { return this._getHour(date); }, _eq: function(date1, date2) { var stime = this._getTime(this._transferDate(date1)); var etime = this._getTime(this._transferDate(date2)); return stime == etime ? true : false; }, /*某個日期是否晚於某個日期*/ _after: function(date1, date2) { var stime = this._getTime(this._transferDate(date1)); var etime = this._getTime(this._transferDate(date2)); return stime < etime ? true : false; }, /*某個日期是否早於某個日期*/ _before: function(date1, date2) { var stime = this._getTime(this._transferDate(date1)); var etime = this._getTime(this._transferDate(date2)); return stime > etime ? true : false; }, /*獲取某年的第一天*/ _getFirstDayOfYear: function(date) { var year = this._getYear(date); var dateString = year + "-01-01 00:00:00"; return dateString; }, /*獲取某年的最後一天*/ _getLastDayOfYear: function(date) { var year = this._getYear(date); var dateString = year + "-12-01 00:00:00"; var endDay = this._getMonthOfDay(dateString); return year + "-12-" + endDay + " 23:59:59"; }, /*獲取某月的第一天*/ _getFirstDayOfMonth: function(date) { var year = this._getYear(date); var month = this._getMonth(date); var dateString = year + "-" + month + "-01 00:00:00"; return dateString; }, /*獲取某月最後一天*/ _getLastDayOfMonth: function(date) { var endDay = this._getMonthOfDay(date); var year = this._getYear(date); var month = this._getMonth(date); return year + "-" + month + "-" + endDay + " 23:59:59"; }, /*一天的開始時間*/ _getFirstOfDay: function(date) { var year = this._getYear(date); var month = this._getMonth(date); var dates = this._getDay(date); return year + "-" + month + "-" + dates + " 00:00:00"; }, /*一天的結束時間*/ _getLastOfDay: function(date) { var year = this._getYear(date); var month = this._getMonth(date); var dates = this._getDay(date); return year + "-" + month + "-" + dates + " 23:59:59"; }, /*獲取下個月的第一天*/ _getNextDayOfMonth: function(date) { var year = this._getYear(date); var month = this._getMonth(date); month = month * 1 + 1; if(month > 12) { year = year + 1; month = month - 12; } month = month > 9 ? month : "0" + month; var dateString = year + "-" + month + "-01 00:00:00"; return dateString; }, _getFirstOfWeek: function(date1) { var week = this._getWeek(date1); var date = this._minusDays(date1, week); var year = this._getYear(date); var month = this._getMonth(date); var dates = this._getDay(date); return year + "-" + month + "-" + dates + " 00:00:00"; }, _getLastOfWeek: function(date1) { var week = 6 - this._getWeek(date1); var date = this._minusDays(date1, week); var year = this._getYear(date); var month = this._getMonth(date); var dates = this._getDay(date); return year + "-" + month + "-" + dates + " 23:59:59"; }, _getNow: function() { return new Date(); }, _format: function(date) { return this._getYear(date) + "-" + this._getMonth(date) + "-" + this._getDay(date) + " " + this._getHour(date) + ":" + this._getMinute(date) + ":" + this._getSecond(date); }, _getDate: function() { return this._getNow(); }, /*年*/ _getYear: function(date) { return this._transferDate(date).getFullYear(); }, /*月*/ _getMonth: function(date) { var month = this._transferDate(date).getMonth() + 1; return month > 9 ? month : "0" + month; }, /*日*/ _getDay: function(date) { var day = this._transferDate(date).getDate(); return day > 9 ? day : "0" + day; }, /*獲取今天星期幾,如果為0代表星期日*/ _getWeek: function(date) { return this._transferDate(date).getDay(); }, /*時*/ _getHour: function(date) { var hour = this._transferDate(date).getHours(); return hour >

相關推薦

封裝一個常用js工具

/** * @author:水痕 * @timer:2016-07-28 * @email:[email protected] * @version:1.0 * @title:封裝一個自己常用的工具類js * @note: */ ; (f

通用JS工具封裝——網路資料請求功能、獲取服務端介面 url、引數功能

程式碼片段 'use strict'; var conf = { serverHost = '' }; var _mm = { //網路請求功能 request : function(param){ var _this = this;

簡單封裝一個OKHttp的工具 非同步get請求和post請求

package com.example.okhttp.OkHttp; import android.os.Handler; import android.os.Looper; import android.util.Log; import com.example.okhttp.Con

常用JSON工具JsonUtil封裝

前言 專案中經常會有String轉Object以及Object轉Json字串的需求,故封裝一個常用Json工具類 Maven依賴 <dependency> <groupId>org.codehau

分享一下常用工具ES6封裝

分享一下目前專案中用到的工具類,僅供參考,直接引用可能會報錯,用到的第三方外掛需要引入對應的包和模組才行  /**  * 公有方法類  */ import Chinese from '../../../static/js/i18n/zh-cn.js'; import En

Java常用工具封裝——連線資料庫的工具

資料庫操作工具類,供大家參考。 package com.itjh.javaUtil; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement

web開發一些常用工具的網站

項目目錄 圖標 nbsp 菜鳥 rip icons power html css som 持續更新中.......... 1. 網頁圖標網站: http://fontawesome.io 下面的鏈接瀏覽其提供的圖標: http://fontawesome.io/ico

java使用Calendar獲取常用簡單工具

凱哥java前言:在工作中,我們經常會用到時間相關的。比如月初、月末、年初、年末、指定月份所在季度的季末、當前時間加X天、x月、x年等這些常用的雖說不難,但是如果要用到,立馬又想不起來。這裏凱哥歸納了一些常用的放在一個工具類中。有需要的朋友可以拿去或是收藏。如果大家有更好的,歡迎留言。如果凱哥哪裏不對,歡迎大

Python之自定義封裝一個簡單的Log

實例對象 級別 port detail 問題 文件夾 相對 alt 腳本 參考:http://www.jb51.net/article/42626.htm 參考:http://blog.csdn.net/u011541946/article/details/70198676

C# 中那些常用工具(Utility Class)(三)

asp call ast eba order com 引用 creat 信息   今天就平常用到的非常多的反射這個技術來做一個總結,當然關於反射需要講解的東西實在是太多的內容,在一片文章中想要講解清楚是非常難的,本篇博客也是就自己本人對這些內容學習後的一個總結,當然包括看書

自己封裝的data日期工具

tar gets back rtt 負數 tint inner clear obj HTML頁面的調用 <!DOCTYPE html> <html> <head> <meta charset=

創建一個node.js express型的app

node.js bst pro 一個 project gen storm sta 創建 npm install -g express-generator express <project_name> cd <project_name>,

兩個常用工具(經常使用)

persist iter per pan src edi cnblogs n) ali 一.首先創建一個可以進行序列化的類 創建類的時候前面加上[Serializable](需要註意的是想要打出序列化需要引入的命名空間為 using System;) 二.然後寫入一些類的基

Apache最常用工具

本博內容摘自部落格大神一杯甜酒,部落格地址https://blog.csdn.net/u012562943/article/details/82664692 1. org.apache.commons.io.IOUtils closeQuietly() toString()

Android 常用開發工具

Android 好用的框架與UI效果demo收集 1.AndroidCommon 裡面幾乎包含你所有想要的工具類,如: 網路工具、SharedPreferences工具、時間工具、日誌工具、字串工具、Json工具、裝置資訊工具、APP工具類、bitmap的工具類等等 github

使用計算BigDecimal寫一個精確計算工具

在日常開放當中需要我們計算數字,利率。通常Java的做法是使用Math相關的API。但是,這樣做是不夠精確的,由於float和double不能進行計算,如果強行進行計算會使得計算不準確。造成難以挽回的損失。為了彌補這一個缺點Java提供了BigDecimal這個類來解決。在使用這個類的時候需要將do

常用工具DBUtil/ServiceFactory/TransactionInvocationHandler/UUIDUtil等等

常用的工具類DBUtil/ServiceFactory/TransactionInvocationHandler/UUIDUtil package com.yy.crud.util; import java.sql.Connection; import java.sql.Driver

Java 常用工具—判斷Excel版本&讀取Excel/CSV檔案

以下內容均來自實際專案需求,記錄下,網上找的讀取Excel會出現不少問題,下面程式碼是經過好多次測試改進的符合現在專案的程式碼,如有不同要求,請自行修改,程式碼均只去掉了包名。 注:我們的Excel 第一行是表頭,其他行是資料1、第一行遇到空列,後面的內容自動忽略掉, 2、如

自己封裝的Log優化工具

/** * Log方法優化工具類 * 只在Debug模式下列印log並新增 log程式碼定位 */ public class L { private L() { /* cannot be instantiated */