刷题

191 阅读2分钟

判断一下的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
    
}
  }
}