数组排序
给出正整数数组 array = [2,1,5,3,8,4,9,5]
请写出一个函数 sort,使得 sort(array) 得到从小到大排好序的数组 [1,2,3,4,5,5,8,9]新的数组可以是在 array 自身上改的,也可以是完全新开辟的内存。不得使用 JS 内置的 sort API
答:
let sort = (numbers)=>{
for(let i=0;i<numbers.length-1;i++){
let index = minIndex(numbers.slice(i))+iif(index !== i){
swap(numbers,index,i)
}
}return numbers
}//需要辅助swap 和minIndex
let swap= (array,x,y)=>{
let temp = array[x]array[x] = array[y]
array[y] = temp
}
let minIndex = (numbers)=>{
let index =0for(let i=1;i<numbers.length;i++){
if(numbers[i]<numbers[index]){
index = i
}
}return index
}sort.call(null,[2,1,5,3,8,4,9,5])
你对 Promise 的了解?
①Promise 的用途:
答:是为了解决命名不规范、回调地狱使得代码复杂、很难进行错误处理等问题(通俗的说 就是Promise 能规范回调的名字或顺序、拒绝回调地狱、让代码可读性更强、很方便的捕获错误 )
②如何创建一个 new Promise(课堂里让大家背过)
答:
return new Promise((resolve,reject)=>{
//内容区 任务成功调用resolve 失败调用reject
})
③如何使用 Promise.prototype.then(可查 MDN)
图解 本图摘自视频https://www.bilibili.com/video/BV1QV411a7Hu?t=359答:
const flag= true
const promise = new Promise((resolve,reject)=>{
if(flag){
resolve('成功了')
}else{
reject('失败了')
}
})promise
.then(name=>{ //成功返回then
console.log(`我的then调用${name}`)
}).catch(name =>{ //失败返回catch
console.log(`我的catch调用${name}`)
}).finally(()=>{
console.log(`成功失败都返回`)
})
④如何使用 Promise.all(可查 MDN)
答: Promise.all可以将多个Promise实例包装成一个新的Promise实例。同时,成功和失败的返回值是不同的,成功的时候返回的是一个结果数组,失败时返回最先被reject失败状态的值
Promise.all的使用:
let p1 = new Promise((resolve,reject)=>{
resolve('成功了')
})let p2 = new Promise((resolve,reject)=>{
resolve('成功了2222222')
})let p3 = new Promise((resolve,reject)=>{
reject('失败')
})Promise.all([p1,p2]).then(result=>{
console.log(result)
}).catch(error=>{
console.log(error)
})
Promise.all([p1,p3,p2]).then((result)=>{
console.log(result)
}).catch((error)=>{
console.log(error) //Promise.all 在任意一个传入的promise失败时返回失败,即有一个立即调用失败函数,那么Promise.all将立即变为失败
})
Promise.all 的异步和同步 :
Promise.all在处理多个异步和同步处理时非常有用,比如说一个页面上需要等两个或者多个ajax的数据回来以后才正常显示,在此之前只显示loading图标
let wake = time =>{
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve(`${time/1000}秒后醒来`)
},time)
})
}let p1 = wake(5000)
let p2 = wake(3000)
Promise.all([p1,p2]).then((result)=>{
console.log(result)
}).catch((error)=>{
console.log(error)
})需要注意的是,Promise.all 获得的成功结果的数组里面的数据顺序和Promise.all接收到的数组顺序是一致的,即p1的结果在前,即便p1的结果获取的比p2要晚,这带来了一个绝大的好处:在前端开发请求数据的过程中 偶尔会遇到发送多个请求并根据请求顺序获取和使用数据的场景,使用Promise.all毫无疑问可以解决这个问题。
⑤如何使用 Promise.race(可查 MDN)
答:race 谁跑得快执行谁
let p1 = new Promise(function(resolve,reject){
setTimeout(resolve,500,"one") })
let p2=new Promise(function(resolve,reject){
setTimeout(resolve,100,'two') })
Promise.race([p1,p2]).then(function(value){ console.log(value) })
跨域
①什么是同源
答:如果两个url的协议、域名、端口号完全一致,那么这两个url就是同源的
比如:https://baidu.com、https://www.baidu.com不同源 //完全一致才算同源
②什么是跨域
当一个请求的协议、域名、子域名、端口之间任意一个与当前页面url不同即为跨域
③JSONP 跨域
最主要思路让js包含数据
④CORS 跨域
Access-Control-Allow-Origin : http://lulu.com:8880
网友评论