面试题-记录

101 阅读1分钟

1.实现一个订阅发布

// function Sub(){
//   this.listener={};
// };
// Sub.prototype.on=function(name,fn){
//   !this.listener[name]&&(this.listener[name]=fn);
// };
// Sub.prototype.emit=function(name,...arg){
//   this.listener[name]&&this.listener[name].apply(window,arg);
// };
// Sub.prototype.off=function(name){
//   delete this.listener[name];
// }
class Sub{
  constructor(){
    this.listener={};
  }
  on(name,fn){
    !this.listener[name]&&(this.listener[name]=fn);
  }
  emit(name,...arg){
    this.listener[name]&&this.listener[name].apply(window,arg);
  }
  off(name){
    delete this.listener[name];
  }
}
let sub=new Sub();
sub.on("custom",function(...arg){
  console.log(arg[0]+arg[1])
});
sub.emit("custom","我们","大家好");

2.实现add(1)(2)(3)(4,5).sum()的累加

function add(...arg){
  let num=0;
  function temp(...arg){
    num+=arg.reduce((total,currentValue)=>total+currentValue);
    return temp;
  };
  temp.sum=function(){
    return num+arg.reduce((total,currentValue)=>total+currentValue);
  };
  return temp;
};

let a=add(1)(2)(3)(4,5).sum();
    b=add(1,2)(3)(5,10)(2,10).sum();
console.log(a);//15
console.log(b);//33

3.arr instanceof Array为什么会返回true(假设arr=[])

arr.__proto__.constructor===Array

4.删除2以下的子节点。

     let ary = [        { p: 1, c: 2 },        { p: 1, c: 3 },        { p: 1, c: 4 },        { p: 2, c: 5 },        { p: 2, c: 6 },        { p: 3, c: 7 },        { p: 6, c: 8 },        { p: 6, c: 9 }      ];      function del(ary, nodeVal) {        for (let i = 0; i < ary.length; i++) {          let item = ary[i];          if (item.p == nodeVal) {            ary.splice(i, 1);            i--;            del(ary, item.c);          }        }        return ary;      }      del(ary, 2);

幸好带电脑了,否则就是纸上手写代码啦!!!