前端面试题总结二

前言

继续学习。。

正文

1.已知如下数组:

var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];

编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组

自己的实现
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]

let set = new  Set()

function s(arr){
  console.log('a');
  for(let i=0;i<arr.length;i++){
    aa(arr[i])
    console.log(arr[i]);
  }
}

function aa(arr){
  if(Array.isArray(arr)){
    s(arr)
  }
  else{
    set.add(arr)
  }
}

let a = Array.from(set).sort((a,b)=>a-b)

console.log(a);


别人实现:
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]

let a= Array.from(new Set(arr.flat(Infinity))).sort((a,b)=>{return a-b})
console.log(a);

关键在于flat函数将数组递归的解析出来

2.Promise执行顺序

const promise = new Promise((resolve, reject) => {
  console.log(1)
  resolve()
  console.log(2)
})

promise.then(() => {
  console.log(3)
})

console.log(4)

结果:1 2 4 3
结论: promise构造函数是同步执行的,then方法是异步执行的

3. new 的实现

// 实现一个new
var Dog = function(name) {
  this.name = name
}
Dog.prototype.bark = function() {
  console.log('wangwang')
}
Dog.prototype.sayName = function() {
  console.log('my name is ' + this.name)
}

let sanmao = new Dog('三毛')
sanmao.sayName()
sanmao.bark()

new 的作用
创建一个新对象obj
把obj的__proto__指向Dog.prototype 实现继承
执行构造函数,传递参数,改变this指向 Dog.call(obj, …args)
最后把obj赋值给sanmao

var _new =function _new(fn,...args) {
  const obj = Object.create(fn.prototype)
  const ret = fn.apply(obj,arg)
  return ret instanceof Object ? ret : obj
}

var simao = _new(Dog, 'simao')
simao.bark()
simao.sayName()
console.log(simao instanceof Dog) // true

总结

本文源自github上的前端试题,贴出链接。

github 搜索Advanced-Frontend

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值