2017年2月17日 星期五

[JQuery]使用JSON格式做比對url,有重覆即取代較新參數

以下資料為function,可直接使用

//檢查url裡面是否有包含get_val,有的話則替代,沒有的話則加入
//url: 舊有url,如: a=1&b=2&c=3...等
//get_val: 新參數,比對舊參數是否有一至的參數,如a=2,b=4...等,也支援出參數如a=2&b=3&c=4
function page_check(url, get_val) {
  var get_url_array;
  var get_array;
  var get_array_finish = '{"url_get":[';

  var match_first_array;
  var match_array;
  var match_array_finish = '{"match_get":[';

  //使用二維陣列處理
  //舊傳值處理
  if(url.match('&') != null) {
    //多筆處理,丟入JSON處理
    get_url_array = url.split('&');
    for(var i = 0 ; i < get_url_array.length ; i++) {
      get_array = get_url_array[i].split("=");
      if( (i+1) == get_url_array.length) {
        //最後一筆不加逗號
        get_array_finish += '{"name":"'+get_array[0]+'","val":"'+get_array[1]+'"}';
      } else {
        get_array_finish += '{"name":"'+get_array[0]+'","val":"'+get_array[1]+'"},';
      }
    }
  } else {
    //單筆處理,丟入JSON處理
    if(url != '') {
      get_array = url.split("=");
      get_array_finish += '{"name": "'+get_array[0]+'","val":"'+get_array[1]+'"}';
    }
  }

  get_array_finish += ']}'; //JSON字串結尾
  obj = JSON.parse(get_array_finish); //JSON格式轉換成陣列

  //新參數轉JSON數據
  //判斷是否有兩個以上
  if(get_val.match('&') != null) {
    match_first_array = get_val.split('&');
    //有
    for(var i = 0 ; i < match_first_array.length ; i++) {
      match_array = match_first_array[i].split("=");
      //if(match_array[0] != '') {//若不為空值,則可寫入進JSON
        if( (i+1) == match_first_array.length) {
          //最後一筆不加逗號
          match_array_finish += '{"name":"'+match_array[0]+'","val":"'+match_array[1]+'"}';
        } else {
          match_array_finish += '{"name":"'+match_array[0]+'","val":"'+match_array[1]+'"},';
        }
      //} //if(match_array[0] != '') {//若不為空值,則可寫入進JSON
    } //for(var i = 0 ; i < match_first_array.length ; i++) {
  } else {
    //沒有
    if(get_val != '') {
      match_array = get_val.split("=");
      match_array_finish += '{"name": "'+match_array[0]+'","val":"'+match_array[1]+'"}';
    }
  }
  match_array_finish += ']}'; //JSON字串結尾
  obj_match = JSON.parse(match_array_finish); //JSON格式轉換成陣列

  //修改陣列內的資料
  var edit_status = false; //判斷修改狀態,有相同值則為true
  //for(var key in get_array_finish) { //列出陣列
  for(var j=0; j< obj.url_get.length; j++) {
    for(var k=0; k< obj_match.match_get.length; k++) {
      //比對是否有重覆資料
      if(obj.url_get[j].name == obj_match.match_get[k].name) {
        obj.url_get[j].val = obj_match.match_get[k].val;
        delete obj_match.match_get[k].name; //有修改過就將名字數據刪除
        edit_status        = true;
      }
    } //for(var k=0; k< obj_match.match_get.length; k++) {
  } //for(var j=0; j< obj.url_get.length; j++) {

  var re_str = ''; //要回傳的連結字串
  if(obj.url_get.length > 0) { //確定非空值
    for(var j=0; j < obj.url_get.length; j++) {
      if(obj.url_get[j].name != '') {
        re_str += "&" +obj.url_get[j].name + "=" +obj.url_get[j].val;
      }
    } // for(var key in get_array_finish) {
  } //if(get_array_finish != '') {

  //判斷新連結參數,若有name不為空的字串,則加入回傳字串
  for(var k=0; k < obj_match.match_get.length; k++) {
    if(obj_match.match_get[k].name != undefined) {
      re_str += "&" +obj_match.match_get[k].name + "=" +obj_match.match_get[k].val;
    }
  }
  //判斷後加字串

  if(edit_status == false) {
    re_str += "&" +   match_array[0] + "=" +  match_array[1];
  }

  //參考:
  // http://blog.xuite.net/ahdaa/blog1/31825228-%5BJavaScript%5D%E5%8F%96%E5%BE%97%E7%94%A8get%E5%82%B3%E9%81%9E%E4%B9%8B%E7%B6%B2%E5%9D%80%E5%88%97%E8%B3%87%E8%A8%8A(Query+String)

  //比對資料並判斷更新、新增
  return re_str;
}

沒有留言 :

張貼留言