实现一个Promise.race

1
2
3
4
5
6
7
8
9
10
function promiseRace(promises){
return new Promise((reslove,rejected){
for(let promise of promises){
Promise.reslove(promise)
.then(reslove)
.then(rejected);
}
})

}

手写深拷贝

基础方案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function deepClone(obj){
if(typeof obj===null) return null;
if(obj instanceof Date) return new Date(obj);
if(obj instanceof RegExp) return new RegExp(obj);//正则对象

//如果循环引用就使用weakMap解决
if(hash.has(obj)) return hash.get(obj);

//如果是数组或者对象,递归使用深拷贝
let cloneObj= new obg.constructor(obj);
hash.set(obj, cloneObj);
for(let key in obj){
if(obj.hasOwnProperty(key)){//保证key不是原型的属性1
cloneObj[key]=deepClone(obj[key],hash);
}
}
return cloneObj;
}

复杂一点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function deepClone(obj,hash=new WeakMap()) {
if(obj===null) return null
if(obj instanceof Date) return new Date(obj);
if(obj instanceof RegExp) return new RegExp(obj);
if(hash.has(obj)) return hash.get(obj);

let cloneObj={};
if(obj inatanceof Map){
// cloneObj[obj]=deepClone(obj);
cloneObj=new Set();
obj.forEach(value=>{
cloneObj.add(deeepClone(value,hash));
});

}else{
cloneObj=new obj.construct();
hsh.set(obj,cloneObj);
for(let key in obj){
if(obj.hasOwnProperty(key)){
cloneObj[key]=deepClone(obj[key],hash);
}
}
}
return cloneObj;

}