判断一下的console顺序
new Promise(resolve => {
resolve(1);
Promise.resolve().then(() => console.log(2));
console.log(4)
}).then(t => console.log(t));
console.log(3);
为什么2比1要先打印
Promise.resolve 方法允许调用时不带参数,直接返回一个resolved 状态的 Promise 对象。立即 resolved 的 Promise 对象,是在本轮“事件循环”(event loop)的结束时,而不是在下一轮“事件循环”的开始时。
如果一个str1字符的一部分可以被重新安排以匹配str2,则返回true,否则返回false。
function scramble(str1, str2) {
var obj={}
for(var i =0;i<str2.length;i++){
if(str2[i]!=-1){ //检测str2中的字符出现次数,以对象的形式存储
if(!obj[str2[i]]){
obj[str2[i]]=1
}else{
obj[str2[i]]++
}
}else{
return false
}
}
try{ //正则匹配 并且出现次数大于
for (var i in obj){
var reg = new RegExp(i, "g");
if(str1.match(reg).length&&str1.match(reg).length<obj[i]){
return false
}
}
}catch(e){return false}
return true
}
给一个数组,从数组中取出相加等于目标值的两个数,并且两个数相距最近。
方法一(通过对象去重,虽然也能出结果,但是效率比方法一低)
var sum_pairs=function(ints, s){
//your code here
var obj={}
for(let i of ints){
if(obj[s-i]){
return [s-i,i]
}
obj[i]=1
}
return undefined
}
方法二(走进死胡同了,两次for循环)
var sum_pairs=function(ints, s){
//your code here
var a =ints.length
var res=[]
for(let i =0;i<ints.length;i++){
console.log("父",i)
for(let e =i+1;e<i+1+a;e++){
console.log("子",e)
if(e-i<a&&ints[i]+ints[e]==s){
a=e-i
res[0]=ints[i]
res[1]=ints[e]
break
}
}
}
return res.length==0?undefined:res
}
输入一个字符串,过滤掉特殊符号后面的字段,并且去掉前后空格
ex:solution("apples, pears # and bananas\ngrapes\nbananas !apples", ["#", "!"])
function solution(input, markers){
var reg=markers.map(e=>{return "\\"+e }).join("|")
var arr=input.split("\n")
for(let i=0;i<arr.length;i++){
let y=arr[i].toString().match(new RegExp(reg))
if(y!==null){
arr[i]=arr[i].slice(0,y.index).trim()
}
}
return arr.join("\n")
}
计算一个等差数列中,缺省的数字
var findMissing = function (list) {
var d=list[list.length-1]-list[0]
var h=0
var e=list.length-1
var b=(list[list.length-1]-list[0])/(list.length)
<!--二分法-->
for(let i =0;i<Math.ceil(Math.log(list.length)/Math.log(2));i++){
let z=h+parseInt((e-h)/2)
console.log(h,e,z,b)
console.log(list[h],(list[0]+h*b),list[z],(list[0]+z*b))
if(list[h]==(list[0]+h*b)&&list[z]==(list[0]+z*b)&&(e-h)!=2){
h=z
console.log("if")
}else if((e-h)<4){
console.log("else<4")
if(list[h]!=list[0]+h*b){
return list[0]+h*b}
if(list[z]!=list[0]+z*b){
return list[0]+z*b}
if(list[e]!=list[0]+e*b){
return list[0]+e*b}
return list[0]+(z+1)*b
}else{
console.log("else")
e=z
}
}
}