function formatNumber(str) { // str 的最大長度爲16位, //["0", "9", "8", "7", "6", "5", "4", "3", "2", "1"] // str的類型可能有:number,string ,null,undefined, if (typeof str === 'string' || typeof str === 'number') {// 123,"123","","0","0.00",0,0.00 // 數字沒有split方法,string轉化; var decimals = String(str).split('.')[1];//小數 decimals = decimals ? '.' + decimals : ''; str = String(str).split('.')[0];//整數 var temStr = str.split(""); //去空格, var tem = []; for (var i = 0; i < temStr.length; i++) { temStr[i] === " " ? null : tem.push(str[i]); } if (temStr.length) { // 方法一 return temStr.reverse().reduce((prev, next, index) => { return ((index % 3) ? next : (next + ',')) + prev }) + decimals // 方法二 //正則匹配邊界\B,邊界後面必須跟着(\d{3})+(?!\d); return str.replace(/\B(?=(\d{3})+(?!\d))/g, ',')+decimals // 方法三 return str.replace(/(\d)(?=(\d{3})+$)/g, "$1,"); } else {// "",未判斷值爲 " "的狀況 return '' } } else {//null,undefined return '' } } //方法四:toLocaleString (123456789).toLocaleString('en-US')//1,234,567,890
日期格式化javascript
// 對Date的擴展,將 Date 轉化爲指定格式的String // 月(M)、日(d)、小時(h)、分(m)、秒(s)、季度(q) 能夠用 1-2 個佔位符, // 年(y)能夠用 1-4 個佔位符,毫秒(S)只能用 1 個佔位符(是 1-3 位的數字) // 例子: // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 // (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18 Date.prototype.Format = function (fmt) { // fmt = YYYY-MM-DD HH:mm:ss 逐一替換正則中的字符 var o = { "Y+":this.getFullYear(),//年份 "M+": this.getMonth() + 1, //月份 "D+": this.getDate(), //日 "H+": this.getHours(), //小時 "m+": this.getMinutes(), //分 "s+": this.getSeconds(), //秒 "Q+": Math.floor((this.getMonth() + 3) / 3), //季度 "S": this.getMilliseconds() //毫秒 }; if (/(Y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); } for (var k in o) if (new RegExp("(" + k + ")").test(fmt)) { fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); } return fmt; }
//方法一: //兩層循環,O(n^2) //方法二: function unique(arr) { return arr.filter(function (ele, index, array) { return array.indexOf(ele) === index //很巧妙,這樣篩選一對一的,過濾掉重複的 }) } //缺點:不支持IE9如下的瀏覽器,時間複雜度仍是O(n^2) //方法三: function unique(arr) { var obj = {} return arr.filter(function (item, index, array) { return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true) }) } //優勢:hasOwnProperty是對象的屬性(名稱)存在性檢查方法。對象的屬性能夠基於Hash表實現,所以對屬性進行訪問的時間複雜度能夠達到O(1); //filter是數組迭代的方法,內部仍是一個for循環,因此時間複雜度是O(n)。 //缺點:不兼容IE9如下瀏覽器,其實也好解決,把filter方法用for循環代替或者本身模擬一個 filter 方法。 //方法四: //ES6 提供了新的數據結構 Set。它相似於數組,可是成員的值都是惟一的,沒有重複的值。 const unique=a=>[...new Set(a)] //優勢:ES6語法,簡潔高效,咱們能夠看到,去重方法從原始的14行代碼到ES6的1行代碼,其實也說明了JavaScript這門語言在不停的進步,相信之後的開發也會愈來愈高效。 //缺點:兼容性問題,現代瀏覽器才支持,有babel這些都不是問題。
canvas 畫圓java
function docanves() { var dashBoard = document.getElementById('dashBoard'); var ctx = dashBoard.getContext('2d'); ctx.beginPath(); ctx.strokeStyle = 'rgba(255,236,202,0.7)'; //以canvas中的座標點(100,100)爲圓心,繪製一個半徑爲50px的圓形 var startArc = Math.PI * 5 / 6, endArc = startArc + Math.PI * 4 / 3, fontSize = window.fontSize;// rem ctx.strokeStyle = '#fff';//線 的顏色 ctx.lineWidth = 0.05 * fontSize;// 線的寬度 ctx.setLineDash([5, 5]);// 點狀樣式 ctx.arc(150, 50, 50, startArc, endArc, false); //false 順時針 ctx.fillStyle = "white";// 填充顏色 ctx.fill(); ctx.stroke(); ctx.closePath(); }
獲取地址欄參數:canvas
//方法一 function getQueryString(name,hash) {// search hash var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i'); var s = hash == 'hash' ? window.location.hash : window.location.search; s = s ? s.substr(1) : ''; var r = s.match(reg); if (r != null) { return unescape(r[2]); } return null; } //方法二 function GetRequest(hash) {// search hash //獲取url中"?"符後的字串 var url = hash == 'hash' ? window.location.hash : window.location.search; var theRequest = new Object(); var str = url && url.substr(1); if ((url.indexOf("?") != -1) && str) { str = str.split("&"); for (var i = 0; i < str.length; i++) { theRequest[str[i].split("=")[0]] = unescape(str[i].split("=")[1]); } } return theRequest; }