对于一些专注于业务逻辑层或者架构的开发人员来说,必要的javascript的基础还是必须要会的。可是,在书写js的时候会不可避免的运用java的知识去定义js,习惯是影响的重要原因。
今天在写js的时候,发现好多需要用到数组,而对于数组来说,数据重复也是一个考虑的因素。针对我这次的个人情况,数组去重需要用到很多次,并且也不仅仅是在当前页面(注:我们用的是html页面,不是jsp),同时,还有就是当前页的数据需要传到另一个页面使用。出于java思想影响,第一个想法就是,定义一个公共的方法,需要去重或者取参数的时候,只要调用方法就行。在此 ,我就把我写的一个数组去重的方法和截取地址栏参数的方法贡献给大家,希望对大家有所帮助。注:任何情况都可以使用。
//这是定义的公共方法。
function un(arg){
var value = [];
var hash = {};
for(var i=0,j=arg.length;i<j;++i){
var type = typeof arg[i]+arg[i];
if(!hash[type]){
hash[type] = 1;
value[value.length] = arg[i];
}
}
return value;
}
arg不用多说,就是需要去重的数组参数。
第二个问题就是传参数的问题,当前页的一个数据需要在另一个页面使用。我不想来回的去新页面调用后台重新返回数据,这样太麻烦。所以自己写了另一个截取参数的方法。
// 获取地址栏的参数数组
function getUrlParams() {
var search = window.location.search;
// 写入数据字典
var tmparray = search.substr(1, search.length).split("&");
var paramsArray = new Array;
if (tmparray != null) {
for (var i = 0; i < tmparray.length; i++) {
var reg = /[=|^==]/; // 用=进行拆分,但不包括==
var set1 = tmparray[i].replace(reg, '&');
var tmpStr2 = set1.split('&');
var array = new Array;
array[tmpStr2[0]] = tmpStr2[1];
paramsArray.push(array);
}
}
// 将参数数组进行返回
return paramsArray;
}
// 根据参数名称获取参数值
function getParamValue(name) {
var paramsArray = getUrlParams();
if (paramsArray != null) {
for (var i = 0; i < paramsArray.length; i++) {
for ( var j in paramsArray[i]) {
if (j == name) {
return paramsArray[i][j];
}
}
}
}
return null;
}
这个方法使用的时候很简单,比如说,地址栏为:http://localhost:8080/ilsp-wap/account_index.htm?type=1 我要取得是这个type=1的这个值,我只要在页面这样写就得到;
var type = getParamValue("type");
另一种方法是:
// 获取本页面的data中sn 当参数传到另一个页面
function formToJsonStr(data) {
var vals = new Array();
vals = data.split("&");
var map = new Array();
var json = "{";
for ( var i in vals) {
map = vals[i].split("=");
json += '\"' + map[0] + '\":"' + map[1] + '\"';
if (i < vals.length - 1)
json += ",";
}
json += "}";
console.log(json);
return json;
}
使用的时候
function more() {
var urlStr = window.location.search.substr(1).split("?");
// 问号后面的参数传
var vals = urlStr.toString();
var json1 = formToJsonStr(vals);
var json2 = eval("(" + json1 + ")");
}
这个json2 就是地址栏你传的参数。
总结:
当然,我知道我的方法并不是最好的,也不是最有效率的,我只是用java的思想去定义一个公共的方法,直接使用就行。是在任何情况下都可以使用的,可能定义方法的时候麻烦,但是你取值的时候却很简单,并且,我一直强调任何情况下都可以直接使用的意思就是:你完全可以直接把方法拷走,直接调用就行。