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);
});
}();