js常用方法集合
1.数组去重
// 思路:获取没重复的最右一值放入新数组 /* * 推荐的方法 * * 方法的实现代码相当酷炫, * 实现思路:获取没重复的最右一值放入新数组。 * (检测到有重复值时终止当前循环同时进入顶层循环的下一轮判断)*/ function uniq(array){ var temp = []; var index = []; var l = array.length; for(var i = 0; i < l; i++) { for(var j = i + 1; j < l; j++){ if (array[i] === array[j]){ i++; j = i; } } temp.push(array[i]); index.push(i); } console.log(index); return temp; }
2.常用很正则校验
//校验输入内容 function clearNoNum(obj) { //先把非数字的都替换掉,除了数字和. obj.value = obj.value.replace(/[^\d.]/g, ""); //保证只有出现一个.而没有多个. obj.value = obj.value.replace(/\.{2,}/g, "."); //必须保证第一个为数字而不是. obj.value = obj.value.replace(/^\./g, ""); //保证.只出现一次,而不能出现两次以上 obj.value = obj.value.replace(".", "$#$").replace(/\./g, "").replace("$#$", "."); //只能输入两个小数 obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3'); //只能输入0~100 obj.value = onj.value.replace(/^((?!0)\d{1,2}|100)$/,""); }
3.将long形式的时间转化为格式化日期
//前台获取后台后台传来的日期格式会自动转化为long数字类型,需要在前台对数字类型进行格式化 //模板代码 仅供参考 Date.prototype.format = function(f){ var o ={ "M+" : this.getMonth()+1, //month "d+" : this.getDate(), //day "h+" : this.getHours(), //hour "m+" : this.getMinutes(), //minute "s+" : this.getSeconds(), //second "q+" : Math.floor((this.getMonth()+3) /3), //quarter "S" : this.getMilliseconds() //millisecond } if(/(y+)/.test(f))f=f.replace(RegExp.$1,(this.getFullYear()+"").substr(4 - RegExp.$1.length)); for(var k in o) if(new RegExp("("+ k +")").test(f))f = f.replace(RegExp.$1,RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));return f } var t=1347497754133; var d= new Date(); d.setTime(t); var s=d.format('yyyy-MM-dd hh:mm:ss'); alert(s);
4.后台对json特殊符号的转义
/** * 转换特殊字符,将json串转换为JS能直接识别的json * json中如果含有单引号 或者特殊字符,前台json.parse()函数在解析时会报错 * 因此需要在后台进行转义 * @param oldJson * @return */ public static String getJsonForJS(String oldJson) { String newJson = oldJson; newJson = newJson.replaceAll("\\\\", "\\\\\\\\"); newJson = newJson.replaceAll("\\'", "\\\\'"); newJson = newJson.replaceAll("\\\"", "\\\\\""); return newJson; }
5.js兼容性的页面关闭方式
//新版本谷歌和火狐的兼容性关闭方法 //场景:如果存在父页面window.close()有效 //如果没有父页面直接window.close()就会出现Scripts may close only the windows that were opened by it.导致页面点击无反应 function cancle() { var userAgent = navigator.userAgent; if (userAgent.indexOf("Firefox") != -1 || userAgent.indexOf("Chrome") != -1) { if(window.opener == null) { window.location.href = "about:blank"; } else { window.close(); } } else { window.opener = null; window.open("", "_self"); window.close(); } }
6.my97datapicker日期间隔设置
//最好使用WdatePicker提供的表达式去计算,自行计算然后使用字符串设置回出现问题 //时间间隔控制在30天之间 WdatePicker({ readOnly: 'true', dateFmt: 'yyyy-MM-dd', onclearing: function () { showAlert("日期必须被选择。"); return true; }, maxDate: '#F{$dp.$D(\'endTime\')}', minDate: '#F{$dp.$D(\'endTime\',{d:-29})}' }) WdatePicker({ readOnly: 'true', dateFmt: 'yyyy-MM-dd', onclearing: function () { showAlert("日期必须被选择。"); return true; }, minDate: '#F{$dp.$D(\'startTime\')}', maxDate: '#F{$dp.$D(\'startTime\',{d:29})}' }) //月份间隔控制在11个月之间 WdatePicker({ readOnly: 'true', dateFmt: 'yyyy-MM', onclearing: function () { showAlert("日期必须被选择。"); return true; }, maxDate: '#F{$dp.$D(\'endTime\')}', minDate: '#F{$dp.$D(\'endTime\',{d:-11})}' }) WdatePicker({ readOnly: 'true', dateFmt: 'yyyy-MM', onclearing: function () { showAlert("日期必须被选择。"); return true; }, minDate: '#F{$dp.$D(\'startTime\')}', maxDate: '#F{$dp.$D(\'startTime\',{d:11})}' })
7.虚拟机设置
-server -XX:PermSize=128M -XX:MaxPermSize=128M
8.js判断数组中是否有重复数据
function isRepeat(arr) { var hash = {}; for(var i in arr) { if(hash[arr[i]]) { return true; } hash[arr[i]] = true; } return false; }