字符串 & Math & Date

2019-03-17  本文已影响0人  antimony

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

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

'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';

写出以下操作的代码范例


写一个函数,生成一个随机 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的时间分别返回如下字符串:

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)
  }, [])
}
上一篇下一篇

猜你喜欢

热点阅读