獲取URL ?後的查詢參數算法
function query(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = decodeURI(window.location.search).substr(1).match(reg); if(r != null) return unescape(r[2]); };
數組去重json
function unique(arr){ var res =[]; var json = {}; for(var i=0;i<arr.length;i++){ if(!json[arr[i]]){ res.push(arr[i]); json[arr[i]] = 1; } } return res; }
數字輸入框數組
function clearNoNum(obj) { obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3'); //只能輸入兩個小數 if(obj.value.indexOf(".") < 0 && obj.value != "") { //以上已通過濾,此處控制的是若是沒有小數點,首位不能爲相似於 0一、02的金額 obj.value = parseFloat(obj.value); } if(obj.value == 'NaN') { obj.value = 1; } }
冒泡排序app
function bubbleSort(arr) { var len = arr.length; for (var i = 0; i < len; i++) { for (var j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j+1]) { //相鄰元素兩兩對比 var temp = arr[j+1]; //元素交換 arr[j+1] = arr[j]; arr[j] = temp; } } } return arr; }
選擇排序
在時間複雜度上表現最穩定的排序算法之一,由於不管什麼數據進去都是O(n²)的時間複雜度。。。因此用到它的時候,數據規模越小越好。惟一的好處可能就是不佔用額外的內存空間了吧。ide
function selectionSort(arr) { var len = arr.length; var minIndex, temp; for (var i = 0; i < len - 1; i++) { minIndex = i; for (var j = i + 1; j < len; j++) { if (arr[j] < arr[minIndex]) { //尋找最小的數 minIndex = j; //將最小數的索引保存 } } temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } return arr; }
插入排序
插入排序的代碼實現雖然沒有冒泡排序和選擇排序那麼簡單粗暴,但它的原理應該是最容易理解的了,由於只要打過撲克牌的人都應該可以秒懂。固然,若是你說你打撲克牌摸牌的時候歷來不按牌的大小整理牌,那估計這輩子你對插入排序的算法都不會產生任何興趣了。。。
插入排序和冒泡排序同樣,也有一種優化算法,叫作拆半插入。對於這種算法,得了懶癌的我就套用教科書上的一句經典的話吧:感興趣的同窗能夠在課後自行研究。。。優化
function insertionSort(arr) { var len = arr.length; var preIndex, current; for (var i = 1; i < len; i++) { preIndex = i - 1; current = arr[i]; while(preIndex >= 0 && arr[preIndex] > current) { arr[preIndex+1] = arr[preIndex]; preIndex--; } arr[preIndex+1] = current; } return arr; }
js深拷貝方式一: 遞歸拷貝this
var clone = function(obj) { var newObj = obj.constructor === Array ? [] : {}; for( var key in obj) { newObj[key] = typeof obj[key] === 'Object' ? clone(obj[key]) : obj[key]; } return newObj; }
js深拷貝方式2,利用json對象轉化爲字符串的方法spa
var clone2 = function(v) { return ( JSON.parse(JSON.stringify(v)) ); }
毫秒轉換爲年月日時分秒prototype
function timestampToTime(timestamp) { var date = new Date(timestamp * 1000); //時間戳爲10位需*1000,時間戳爲13位的話不需乘1000 Y = date.getFullYear() + '-'; M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; D = change(date.getDate()) + ' '; h = change(date.getHours()) + ':'; m = change(date.getMinutes()) + ':'; s = change(date.getSeconds()); return Y + M + D + h + m + s; } function change(t) { if (t < 10) { return "0" + t; } else { return t; } }
js模糊查詢(表格td)插件
$("#filterName").keyup(function() { $("table tbody tr").hide(); $(".inv_neirong").filter(":contains('" + ($(this).val()) + "')").parent().show(); })
視頻插件
<object width='541' height='450'> <param name='allowFullScreen' value='true'> <param name='movie' value='http://img1.c0.letv.com/ptv/player/swfPlayer.swf?autoPlay=0&id=31121775'/> <embed src='http://img1.c0.letv.com/ptv/player/swfPlayer.swf?autoPlay=0&id=31121775' width='541' height='450' allowFullScreen='true' type='application/x-shockwave-flash'/> </object>
獲取日期之間的日期數組
Date.prototype.format = function() { var s = ''; var mouth = (this.getMonth() + 1) >= 10 ? (this.getMonth() + 1) : ('0' + (this.getMonth() + 1)); var day = this.getDate() >= 10 ? this.getDate() : ('0' + this.getDate()); s += this.getFullYear() + '-'; // 獲取年份。 s += mouth + "-"; // 獲取月份。 s += day; // 獲取日。 return(s); // 返回日期。 }; function getAll(begin, end) { var dateArr=[]; var ab = begin.split("-"); var ae = end.split("-"); var db = new Date(); db.setUTCFullYear(ab[0], ab[1] - 1, ab[2]); var de = new Date(); de.setUTCFullYear(ae[0], ae[1] - 1, ae[2]); var unixDb = db.getTime(); var unixDe = de.getTime(); for(var k = unixDb; k <= unixDe;) { dateArr.push((new Date(parseInt(k))).format()); k = k + 24 * 60 * 60 * 1000; } console.log(dateArr); }