面试题

209 阅读1分钟
  1. 实现一个function sum达到一下目的:
sum(1,2,3,4,5).valueOf();   // 15
sum(1,2,3,4)(5).valueOf();  // 15
sum(1,2,3)(4)(5).valueOf();  // 15
sum(1,2)(3)(4)(5).valueOf();  // 15
sum(1,2)(3,4)(5).valueOf();   // 15

答案:

function sum() {
      let that = this;
      this.arr = [...arguments]; //转换为真实数组

      function _sum() {//内部函数,一个闭包
        that.arr.push(...arguments);
        return _sum;
      }

      _sum.valueOf = function () {
        //return eval(that.arr.join('+'))
        return that.arr.reduce(function(x,y){
          return x+y;
        })
      }
      return _sum;
    }
    console.log(sum(1, 2, 3, 4, 5).valueOf());
    console.log(sum(1, 2, 3, 4)(5).valueOf());
    console.log(sum(1, 2, 3)(4)(5).valueOf());
    console.log(sum(1, 2)(3)(4)(5).valueOf());
    console.log(sum(1, 2)(3, 4)(5).valueOf());
  1. 实现一个function,使用正则匹配获取当前浏览器的多参数,参数可以是一个或者多个如:

http://www.sodacar.com/vehicles?car=13242&station=83212jde 返回: {car: 13242, station: 83212jde}

http://www.sodacar.com/vehicles?car=13242&station=83212jde&lat=102.21301&lng=31.22345 返回: {car: 13242, station: 83212jde, lat: 102.21301, lng: 31.22345}

答案:

function getUrlParam() {
      var match,
        search = /([^&=]+)=?([^&]*)/g,
        //query = window.location.search.substring(1);
        query="station=83212jde&lat=102.21301&lng=31.22345";//模拟数据
      urlParams = {};
      while (match = search.exec(query)) {//检索字段和正则是否匹配,返回数组
        urlParams[match[1]] = match[2];
      }
      return urlParams;
    }
    
    getUrlParam();
    //{station: "83212jde", lat: "102.21301", lng: "31.22345"}