写一个随机整数函数
返回从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' ) // 输出任意毫秒数的数字或字符串,查询是否成功