gumpgit
8/21/2018 - 3:52 AM

格式化参数

JS 常用


//格式化参数
//function formatParams(data) {
//   var arr = [];
//   for (var name in data) {
//     arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[name]));
//   }
//   //arr.push(("v=" + Math.random()).replace(".",""));
//   return arr.join("&");
// }  

let obj = {
  a: 123,
  b: 456,
  c: {
    a: 123,
    b: 456
  }
};
let arr = [1, 2, 3, {
  a: 123
}];
// 1.浅拷贝
function clone(value) {
  if (typeof value === "object") {
    let isArray = Object.prototype.toString.call(value) === '[object Array]';
    let rs = isArray ? [...value] : {
      ...value
    };
    // for(let i in value) {
    //     rs[i] = value[i]
    //   }
    return rs;
  } else {
    return value;
  }
}
let copy = clone(arr);
console.log(copy);

arr.a = 11;
console.log(arr);

// 2.如果知道对象是数组 可以直接
let copy = arr.slice(0);
console.log(copy)
// 或者
let copy = [].concat(arr);
console.log(copy)



// 深拷贝
function clone(value){
   // if(typeof value ==="object"){
     //let isArray = Object.prototype.toString.call(value) === '[object Array]';
   //  let rs = Array.isArray(value)?[]:{};
   // for(let i in value) {
   //      rs[i] = clone(value[i]);
   //  }
   //  return rs;
   // } else {
   //   return value;
   // } 
  let res = value instanceof Array ? [] : {};
  for(const [k,v] of Object.entries(value)) {
    res[k] = v typeof === 'object' ? clone(v):v;
  }
  
}
let copy = clone(arr);
console.log(copy);

arr[3].a =11;
console.log(arr);

// 或者使用 JSON
var copy = JSON.parse(JSON.stringify(arr));
console.log(copy);
arr[3].a = 11;
console.log(arr);

 
var s = 'http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe';
~ function () {
/*
 * formatTime:时间字符串的格式化处理
 *   @params
 *     template:[string] 我们最后期望获取日期格式的模板
 *     模板规则:{0}->年  {1~5}->月日时分秒
 *   @return
 *     [string]格式化后的时间字符串  
 */
function formatTime(template = "{0}年{1}月{2}日 {3}时{4}分{5}秒") {
  let timeAry = this.match(/\d+/g);
  return template.replace(/\{(\d+)\}/g, (...[, $1]) => {
    let time = timeAry[$1] || "00";
    return time.length < 2 ? "0" + time : time;
  });
}

/*
 * queryURLParams:获取URL地址问号和面的参数信息(可能也包含HASH值)
 *   @params
 *   @return
 *     [object]把所有问号参数信息以键值对的方式存储起来并且返回  
 */
function queryURLParams() {
  let obj = {};
  this.replace(/([^?=&#]+)=([^?=&#]+)/g, (...[, $1, $2]) => obj[$1] = $2);
  this.replace(/#([^?=&#]+)/g, (...[, $1]) => obj['HASH'] = $1);
  return obj;
}

/*
 * millimeter:实现大数字的千分符处理
 *   @params
 *   @return
 *     [string]千分符后的字符串
 */
function millimeter() {
  return this.replace(/\d{1,3}(?=(\d{3})+$)/g, content => content + ',');
}

/* 扩展到内置类String.prototype上 */
["formatTime", "queryURLParams", "millimeter"].forEach(item => {
  String.prototype[item] = eval(item);
});
  
}();