• shopee一面代码题


    1. 第一道是仿JSON.parse

    json_parse("[12,[[3],45,6,7],8,9]")

    https://blog.51cto.com/u_11658127/3396506

    直接从这简化

    var json_parse = function () {
      var at = 0,      // 当前字符的索引
        ch = '';   // 当前字符
      var next = function (c) {
        // 如果提供了参数c, 那么检查它是否匹配当前字符
        if (c && c !== ch) {
          error("Expected '" + c + "' instead of '" + ch + "'");
        }
        // 获取下一个字符。当没有下一个字符时, 返回一个空字符串
        ch = text.charAt(at);
        at += 1;
        return ch;
      }
      var number = function () {
        // 解析一个数字值
        var number, string = '';
    
        while (ch >= '0' && ch <= '9') {
          string += ch;
          next();
        }
        number = +string;
        if (isNaN(number)) {
          console.error("Bad number");
        } else {
          return number;
        }
      }
      var white = function () {
        // 跳过空白
        while (ch && ch <= ' ') {
          next();
        }
      }
      var array = function () {
        // 解析一个数组值
        var array = [];
        if (ch === '[') {
          next('[');
          white();
          if (ch === ']') {
            next(']');
            return array; // 空数组
          }
          while (ch) {
            array.push(value());
            white();
            if (ch === ']') {
              next(']');
              return array;
            }
            next(',');
            white();
          }
        }
        error("Bad array");
      }
      var value = function () {
        // 解析一个JSON 值 它可以是对象数组、字符串、数字或一个词
        white();
        switch (ch) {
    
          case '[':
            return array();
    
          default:
            return number()
        }
      };
      return function (source, reviver) {
        var result;
        text = source;
        at = 0;
        ch = ' ';
        result = value();
        white();
        if (ch) {
          error("Syntax error");
        }
        return result
      }
    }();
    var res = json_parse("[12,[[3],45,6,7],8,9]")
    
    console.log(res)
    
    

    简化下:

    var array_parse =  function(str){
      var at = 0
      var ch = str[0]
      var next = function(){
        at++;
        ch = str.charAt(at)
      }
      var array = function(){
        var array = []
        if(ch == '['){
          next()
           if (ch === ']') {
            next();
            return array; // 空数组
          }
          while (ch) {
            array.push(value());
            if (ch === ']') {
              next();
              return array;
            }
            next();
          }
        }
      }
      var number = function(){
        var number, string = '';
        while (ch >= '0' && ch <= '9') {
          string += ch;
          next();
        }
        number = +string;
        if (isNaN(number)) {
          console.error("Bad number");
        } else {
          return number;
        }
      }
      var value = function(){
        switch(ch){
          case '[':
            return array()
            default:
            return number();
        }
      }
      var result = value()
      return result
    }
    
    console.log(array_parse("[23,4,[7,56,[8]],6]"))
    
    1. 实现一个cache函数
    function cache(fn){
      // TO-DO
      var res ={}
      return function(){
        var arg = arguments[0]
        console.log(arg)
        if(res[arg]){
          console.log('走的缓存')
          return res[arg]
        }else{
          res[arg] = fn.call(null,arg)
          return res[arg]
        }
        
      }
      
    }
    
    function complexCal(a){
      //这里有复杂计算
      return a
    }
    
    var combine  = cache(complexCal)
    
    combine(1)
    combine(2)
    combine(1)
    
  • 相关阅读:
    我的学习思维:有关时间的管理
    Eureka的故事,专注能让你看到别人看不到的事情
    善用思维导图来整理发散的思维
    二八原理:人才招聘中的二八原理
    二八原理:员工激励中的二八原理
    二八原理:员工的三种类型
    二八原理:你必须知悉的二八原理
    Java程序员笔试、面试题目
    String StringBuffer StringBuilder
    log4j的使用详细解析
  • 原文地址:https://www.cnblogs.com/johnzhu/p/15812808.html
Copyright © 2020-2023  润新知