美文网首页
字符串 & Math & Date

字符串 & Math & Date

作者: antimony | 来源:发表于2019-03-17 00:15 被阅读0次

    多行字符串的声明有哪几种常见写法?

    字符串默认只能写在一行内,分成多行将会报错。

    'a
    b
    c'
    // SyntaxError: Unexpected token ILLEGAL
    

    上面代码将一个字符串分成三行,JavaScript就会报错。

    1.如果长字符串必须分成多行,可以在每一行的尾部使用反斜杠。

    var longString = "Long \
    long \
    long \
    string";
    
    longString
    // "Long long long string"
    

    上面代码表示,加了反斜杠以后,原来写在一行的字符串,可以分成多行,效果与写在同一行完全一样。注意,反斜杠的后面必须是换行符,而不能有其他字符(比如空格),否则会报错。

    2.连接运算符(+)可以连接多个单行字符串,用来模拟多行字符串。

    var longString = 'Long '
      + 'long '
      + 'long '
      + 'string';
    

    3.ES6 可以用 符号写多行字符串: var str =
    你好
    我是Aman
    jianshu.com/u/4bcc49eef409
    开启你的前端之路
    `


    以下代码 输出什么?

    var str = 'C:\Users\Document\node\index.js'
    console.log(str.length)
    

    如何声明 str 让 console.log(str)输出 C:\Users\Document\node\index.js?
    输出27,使用转义字符

    var str = 'C:\\Users\\Document\\node\\index.js'
    console.log(str)
    

    第三题:对于字符串

    var str = 'hello jirengu.com';
    

    写出以下操作的代码范例

    • 获取 str 下标为3的字符
      str[3]
    • 获取 str 下标为4的字符的 Ascii 码
      console.log(str.charCodeAt(4));
    • 截取字符g到末尾的字符串
      var sub = str.substring(str.search('g'),str.length-1);
    • 从字符o开始,截取长为4个字符的字符串
      var sub = str.substr(str.search('o'),4);
    • 获取第一个 l的下标
      var index = str.search('i');

    写一个函数,生成一个随机 IP 地址,一个合法的 IP 地址为 0.0.0.0~255.255.255.255。

    function getRandIP(){
      var ip =[];
      for(var i = 0;i<4;i++) {
        ip.push(Math.floor(Math.random()*255));
      }
      return ip.join('.');
    }
    var ip = getRandIP()
    console.log(ip) // 10.234.121.45
    

    写一个函数,生成一个随机颜色字符串,合法的颜色为#000000~ #ffffff。

    ffunction getRandColor(){
      dict =                 ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'];
      color = [];
      for(var i =0;i<6;i++){
        color.push(dict[Math.floor(Math.random()*16)]);
      }
      return "#"+color.join("");
    }
    var color = getRandColor()
    console.log(color)   // #3e2f1b
    

    写一个函数,返回从min到max之间的 随机整数,包括min不包括max 。

    // 返回给定范围内的随机整数
    function getRandomInt(min, max) {
      return Math.floor(Math.random() * (max - min + 1)) + min;
    }
    

    写一个函数,生成一个长度为 n 的随机字符串,字符串字符的取值范围包括0到9,a到 z,A到Z。

    function getRandStr(len){
      var a = '';
      var dict =  '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
      for(var i=0; i<10; i++){
        a += dict[Math.floor(Math.random()*dict.length)];
      }
      return a;
    }
    var str = getRandStr(10); // 0a3iJiRZap
    console.log(str);
    

    写一个函数,参数为时间对象毫秒数的字符串格式,返回值为字符串。假设参数为时间对象毫秒数t,根据t的时间分别返回如下字符串:

    • 刚刚( t 距当前时间不到1分钟时间间隔)
    • 3分钟前 (t距当前时间大于等于1分钟,小于1小时)
    • 8小时前 (t 距离当前时间大于等于1小时,小于24小时)
    • 3天前 (t 距离当前时间大于等于24小时,小于30天)
    • 2个月前 (t 距离当前时间大于等于30天小于12个月)
    • 8年前 (t 距离当前时间大于等于12个月
    function friendlyDate(time){
      var delta_t = new Date() - time;
      if(delta_t < 60*1000){
        console.log('刚刚');
      } else if(delta_t < 60*60*1000){
        console.log(Math.floor(delta_t / (60*1000)) + '分钟前');
      } else if(delta_t < 24*60*60*1000){
        console.log(Math.floor(delta_t / (60*60*1000)) + '小时前');
      } else if(delta_t < 30*24*60*60*1000){
        console.log(Math.floor(delta_t / (24*60*60*1000)) + '天前');
      } else if(delta_t < 12*30*24*60*60*1000){
        console.log(Math.floor(delta_t / (30*24*60*60*1000)) + '个月前');
      } else{
        console.log(Math.floor(delta_t / (12*30*24*60*60*1000)) + '年前');
      }
    }
    var str = friendlyDate(Date.now()-1999888);
    var str2 = friendlyDate('1538822220220');
    

    实现一个reduce函数,作用和原生的reduce类似下面的例子。

    Ex:

     var sum = reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0); => 6
    

    实现:

    function reduce(arr, iteratee, initValue){
      var tmpArr = (initValue === undefined ? [] : [initValue]).concat(arr) //判断initValue是否为undefined
      while(tmpArr.length > 1){
        tmpArr.splice(0, 2, iteratee(tmpArr[0], tmpArr[1]))
      }
      return tmpArr[0]
    }
    
    var sum = reduce([3,5], function(v1, v2){
      return v1 * v2
    },4)
    console.log(sum)
    

    实现一个flatten函数,将一个嵌套多层的数组 array(数组) (嵌套可以是任何层数)转换为只有一层的数组,数组中元素仅基本类型的元素或数组,不存在循环引用的情况。

    Ex::

    flatten([1, [2], [3, [[4]]]]) => [1, 2, 3, 4];
    

    解答:

    function flatten(arr){
      var newArr = []
      function _flat(arr){
        arr.forEach(val=>{
          if(Array.isArray(val)){
            _flat(val)
          }else{
            newArr.push(val)
          }
        })    
      }
      _flat(arr)
      return newArr
    }
    //高级写法
    function enhancedFlatten(arr){
      return arr.reduce(function(initArr, currentArr){
        return initArr.concat(Array.isArray(currentArr)?flatten(currentArr):currentArr)
      }, [])
    }
    

    相关文章

      网友评论

          本文标题:字符串 & Math & Date

          本文链接:https://www.haomeiwen.com/subject/uklemqtx.html