一、解析url参数为对象形式
const url = 'http://www.baidu.com/we/index.html?id=098&aaa=123&ccc=456';
function parseParam(url) {
let arr = url.split('?')[1].split('&');
let obj = {};
arr.forEach(item => {
let [key, value] = item.split('=');
if (/^\d+$/.test(value)) {
value = parseInt(value)
}
obj[key] = value
});
return obj
}
console.log(parseParam(url));//{aaa:123,ccc:456,id: 98}
二、千分位分隔符
var num=12345678.32423432;
function regForm(num) {
return num.toString().replace(/\d+/, (p) => {
return p.replace(/\d(?=(\d{3})+$)+/g, (p1, p2) => {
return p1 + ','
})
})
}
console.log(regForm(num));//12,345,678.32423432
三、判断对象数据类型
//优雅写法:const isType=type=>target=>`[object ${type}]`===Object.prototype.toString.call(target);
const isType=function(type){
return function(target){
return `[object ${type}]`===Object.prototype.toString.call(target);
}
}
const isArray=isType('Array');
console.log(isArray([1,3,'25']));//true
console.log(isArray({a:123}));//false
const isObj=isType('Object');
console.log(isObj([1,3,'25']));//false
console.log(isObj({a:123}));//true
const isString=isType('String');
console.log(isString([]));//false
console.log(isString({}));//false
console.log(isString('hello'));//true
四、手动实现数组扁平化
//利用递归实现
const arr=[1,[2,3,4],5,6];
function flatten(arr){
let result=[];
for(let i=0,len=arr.length;i<len;i++){
if(Array.isArray(arr[i])){
result=result.concat(flatten(arr[i]))
}else{
result.push(arr[i])
}
}
return result
}
const a={a:2,b:3};
const b={a:2,b:3};
const result=flatten(arr);
console.log(result);//[1, 2, 3, 4, 5, 6]
//利用reduce实现
const arr=[1,[2,3],4,5,6];
function flatten(arr) {
return arr.reduce(function(acc,cur){
if(Array.isArray(cur)){
return acc.concat(flatten(cur))
}else {
return acc.concat(cur)
}
},[])
}
const result=flatten(arr);
console.log(result);//[1, 2, 3, 4, 5, 6]