【Javascript】ES5数组、字符串、Date


写一个随机整数函数

返回从min到max之间的 随机整数,包括min不包括max

// 方法1 使用Math.floor()
function getRandomInt1(max, min){
  return Math.floor(Math.random()*(max - min)) + min
}
// 方法2 使用Math.ceil()
function getRandomInt2(max, min){
  return Math.ceil(Math.random()*(max - min)) + (min - 1)
}

写一个随机字符串函数

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

function getRandStr(len){
  var str = '' // 声明需要的是一个字符串
  var dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' // 声明字符串的取值范围
  for(var i = 0; i < len; i++){ // 使用for循环来执行多次范围取值
    var x= Math.floor(Math.random()*dict.length) // 从字符串取值范围中,随机出一个下标数作为本次取到的值
    str = str + dict[x] // 将本次取到的值和元字符串做运算拼接字符串
  }
  return str // 返回循环结束后的字符串
}
getRandStr(x); // 填写需要的字符串长度以验证函数正确性

写一个随机 IP 地址函数

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

function getRandIP(ip){
  var arr = [] // 声明储存IP地址的对象是个数组
  for(var i = 0; i < 4; i++){ // 使用for循环来取4次值
    var x = Math.floor(Math.random()*256) //使用floor方法,将0-255的随机整数赋值给x
    arr.unshift(x) // 在ip数组中添加刚取到的随机值
  }
  return arr // 返回循环结束后的arr数组
}
var ip = getRandIP() // 将函数执行完毕的数组赋值给ip
console.log(ip.join('.')) // 使用join方法将数组以'.'连接并输出

写一个随机颜色字符串函数

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

function getRandColor(){
  var str = '#' // // 声明需要的是一个字符串
  var dict = '0123456789abcdef' // 声明字符串的取值范围是十六进制数
  for(var i = 0; i < 6; i++){ // 使用for循环来执行6范围取值
    var x= Math.floor(Math.random()*dict.length) // 从字符串取值范围中,随机出一个下标数作为本次取到的值
    str = str + dict[x] // 将本次取到的值和元字符串做运算拼接字符串
  }
    return str // 返回循环结束后的字符串
}
var color = getRandColor() // 将函数执行完毕的数组赋值给ip
console.log(color) // 输出'#'之后的留个随机十六进制数

实现一个flatten函数

将一个嵌套多层的数组 array(数组) (嵌套可以是任何层数)转换为只有一层的数组,数组中元素仅基本类型的元素或数组,不存在循环引用的情况。
看的有些懵逼,我等到视频上传后看看相关部分再做解答吧

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

实现一个reduce函数

作用和原生的reduce类似
reduce方法的作用是遍历数组,调用回调函数,将数组元素组合成一个值

function likeReduce(arr, method, initValue){ // 声明函数,并有3个参数:初始数组、调用方法/函数、初始值
  var tagArr = (initValue === undefined ? [] : [initValue]).concat(arr)
 //定义一个函数体内的数组,并判断是否有初始值,如果有则拼接,没有则为空数组
  while(tagArr.length > 1){
    tagArr.splice(0, 2, method(tagArr[0], tagArr[1])) 
// 数组长度>1时,使用.splice方法,将数组前两个元素删除并用新元素代替,新元素调用method方法进行计算
  }
  return tagArr[0] // 将调用method方法得到的新元素作为数组的首个元素
}
// 测试函数
var sum = likeReduce([2,5], function(v1, v2){ return v1 + v2 } , 10) // 有初始值的加和
var product = likeReduce([2,5,8], function(v1, v2){ return v1 * v2 }  ) // 无初始值的乘积 输出80
console.log(sum)

写一个函数getChIntv

获取从当前时间到指定日期的间隔时间

function getChIntv(x){
  var today = Date.parse(new Date()) // 使用parse方法获取 当前 时间距离70年1月1日的间隔时间
  var targerDay = Date.parse(x) // 使用parse方法获取 目标 时间距离70年1月1日的间隔时间
  return today - targerDay // 将当前、目标日期相对70年的间隔的时间,做减法运算得到当前和目标日期的间隔
}
var str = getChIntv("2017-02-08T10:30:24"); // 将函数执行完毕的数组赋值给str
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个月)
/*
1分钟:60000ms
3分钟:180000ms
8小时:28800000ms
3天:259200000ms
2个月:5184000000ms(60天)
8年:252288000000ms
*/
//函数体如下

function friendlyDate(time){
  var time // 声明一个time变量
  switch(true){ // 使用switch语句,将变量和对应的时间进行比较运算,并将相应的字符串赋值给变量
    case time <= 60000:
      time = '刚刚'
      break

    case time > 60000 && time <= 180000:
      time = '3分钟内'
      break

    case time > 180000 && time <= 28800000:
      time = '8小时内'
      break

    case time > 28800000 && time <= 259200000:
      time = '3天内'
      break

    case time > 259200000 && time <= 5184000000:
      time = '2个月内'
      break

    case time > 5184000000 && time <= 252288000000:
      time = '8年内'
      break

    default:
      time = '这是坟不要挖'
  }
  return time // 返回赋值后的变量
}
var str = friendlyDate( '1' ) //  输出任意毫秒数的数字或字符串,查询是否成功

你可能感兴趣的:(【Javascript】ES5数组、字符串、Date)