-
关键词:Math对象、Data对象、数组Array
一、Math任务
1. 编写函数,功能:返回从min到max之间的随机整数,包括min不包括max
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
Math.random() // 返回一个从0到1之间的伪随机数:可以等于0,一定小于1
Math.floor() // 返回小于或等于参数的最大整数
Math.random() * (max - min) // 最小值为 0 ,最大值无限接近 差值 -1
Math.floor(Math.random() * (max - min)) // 最小值为 0,最大值为 差值 -1
Math.floor(Math.random() * (max - min)) + min // 最小值为 min,最大值为 max-1
2. 编写函数,功能:返回从min都max之间的随机整数,包括min包括max
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
Math.random() * (max - min + 1) // 最小值为 0 ,最大值无限接近 差值 +1
Math.floor(Math.random() * (max - min + 1)) // 最小值为 0,最大值为 差值
Math.floor(Math.random() * (max - min + 1)) + min // 最小值为 min,最大值为 max
3. 编写函数,功能:生成一个长度为 n 的随机字符串,字符串字符的取值范围包括0到9,a到 z,A到Z
// 1. 字符串可以通过类数组下标的方法进行访问
// 2. 类数组下标可以通过 Math.random() 随机生成
// 3. 建立一个字典和一个空字符串,从字典中随机筛选字符放入空字符串中
// 4. 利用循环控制所要字符串的长度
// 5. 注意取值范围和要求
function getRandStr(len){
//补全函数
var disc = '1234567890abcdefjhigklmnopqrstuvwxyzABCDEFJHIGKLMNOPQRSTUVWXYZ'
var str = ''
for(var i = 0; i < len; i++){
str += disc[Math.floor(Math.random() * 62)]
// (62+1)会出现undefined,原因 disc 共有62位,但第62位的下标是disc[61],第1位的下标是disc[0]【注意位数与下标的关系:下标 = 位数 - 1】
}
return str
}
var result = getRandStr(15)
console.log(result) // mcwNMWGbbEmwodq
console.log(result.length) // 15
4. 编写函数,功能:生成一个随机 IP 地址,一个合法的 IP 地址为 0.0.0.0~255.255.255.255
// 直接循环、随机生成4个数字,使用连接符连接4个数字
// 第一将循环结果push到数组中,第二将数组转化为字符串
function getRandIP(){
//函数补全
var str = []
for(var i = 0; i < 4; i++){
str.push(Math.floor(Math.random() * (255+1)))
}
var strIp = str.join('.')
return strIp
}
var ip = getRandIP()
console.log(ip) // 101.11.140.65
5. 编写函数,功能:生成一个随机颜色字符串,合法颜色为#000000~ #ffffff
// 制作字典,筛选字符
// 循环 6 次,每次生成 1 个字符,组装显示
function getRandColor(){
var disc = '1234567890abcdef'
var str = ''
for(var i = 0; i < 6; i++){
str += disc[Math.floor(Math.random() * 16 )]
}
var show = '#' + str
return show
}
var color = getRandColor()
console.log(color) // #4a8e36
二、数组任务
1.1 数组方法里push、pop、shift、unshift、join、split分别是什么作用?
方法 |
作用 |
push |
向数组的末尾添加一个或多个元素,并返回新的长度,直接修改原数组 |
pop |
删除并返回数组的最后一个元素,数组长度减 1,直接修改原数组 |
shift |
删除数组的第一个元素,并返回第一个元素的值,直接修改原数组 |
unshift |
向数组的开头添加一个或更多元素,并返回新的长度,直接修改原数组 |
join |
把数组中的所有元素放入一个字符串中,元素通过指定分隔符进行分隔 |
split |
把一个字符串分割成字符串数组,字符串通过指定点进行分割 |
splice |
向/从数组中添加/删除项目,然后返回被删除的项目,直接修改原数组 |
1.2 用 splice函数分别实现 push、pop、shift、unshift方法
- splice:向数组中添加元素,或从数组中删除元素
语法:arrayObject.splice(index, howmany, item1,.....,itemX)
参数说明:
1. index:必填;整数;定义起始位置;若为负数,起始位置从尾部开始计算
2. howmany:必填;需要删除的元素数量;若为 0,则不删除任何元素
3. itemX:选填;向数组添加的新元素;数量可为多个
- 1.push:向数组末尾添加一个或多个元素【堆栈】
var arr1 = new Array(1,2,3,4,5)
arr1.splice(arr.length, 0, 6)
console.log(arr1) // [1, 2, 3, 4, 5, 6]
var arr2 = new Array(1,2,3,4,5)
arr2.splice(arr.length-1, 1)
console.log(arr2) // [1, 2, 3, 4]
var arr3 = new Array(1,2,3,4,5)
arr3.splice(0, 1)
console.log(arr3) // [2, 3, 4, 5]
- 4.unshift:向数组开头添加一个或多个元素【队列】
var arr4 = new Array(1,2,3,4,5)
arr4.splice(0, 0, 0)
console.log(arr4) // [0, 1, 2, 3, 4, 5]
2. 编写函数,功能:操作数组,数组中的每一项变为原来的平方,操作原数组
// 遍历数组 { 计算平方 }
// 循环时:将平方结果赋值替换原数组元素 —— 使用数组下标
function squareArr(arr){
// 函数补全
for(var i = 0; i < arr.length; i++){
arr[i] = Math.pow(arr[i], 2)
// arr[i] = arr[i] * arr[i] // 指定每一项的保存位置
}
return arr
}
var arr = [2, 4, 6]
squareArr(arr)
console.log(arr) // [4, 16, 36]
3. 编写函数,功能:操作数组,返回一个新数组,新数组中只包含正数,原数组不变
// 遍历数组 { 条件判断 }
// 声明新空数组保存值,最终return值
function filterPositive(arr){
//函数补全
var emptyArr = []
for(var i = 0; i < arr.length; i++){
if( typeof arr[i] === 'number' && arr[i] > 0){ // 只需要数字,且是正数
emptyArr.push( arr[i] ) // .push 将 参数 添加到 指定数组中(emptyArr)
}
}
return emptyArr
}
var arr = [3, -1, 2, '饥人谷', true]
var newArr = filterPositive(arr)
console.log(arr) // [3, -1, 2, '饥人谷', true]
console.log(newArr) // [3, 2]
三、Date 任务
1. 编写函数getChIntv,获取从当前时间到指定日期的间隔时间
// 1. 分别获取当前时间、指定时间,并计算差值
// 2. 转换差值显示格式:毫秒数转换为指定格式
// 3. 以北京时间 0 为基准
function getChIntv(time){
var endLine = Date.parse(time) // 1.传递指定时间
var startLine = Date.now() // 2.获取当前时间
var interval = endLine - startLine // 3.计算时间间隔(可使用Math.abs())
var secondsAll = parseInt(interval/1000) // 4.全部秒数(需要整数进行计算)
var seconds = secondsAll % 60 // 5.换算秒数
var minutesAll = parseInt(secondsAll/60) // 6.全部分钟数
var minutes = minutesAll % 60 // 7.换算分钟数
var hoursAll = parseInt(minutesAll/60) // 8.全部小时数
var hours = hoursAll % 24 // 9.换算小时数
var daysAll = parseInt(hoursAll/24) //10.全部天数
var str = ''
return var str = '距除夕还有 ' + Math.abs(daysAll) + ' 天 ' + Math.abs(hours-8) + ' 时 ' + Math.abs(minutes) + ' 分 ' + Math.abs(seconds) + ' 秒'
}
var str = getChIntv("2017-01-27");
console.log(str); // 距除夕还有 10 天 6 时 30 分 6 秒
// 根据条件显示不同提示:替换上面 return 语句
if((endLine - startLine) > 0){
return str = '距 ' + time + ' 还剩下 ' + Math.abs(daysAll) + ' 天 ' + Math.abs(hours-8) + ' 时 ' + Math.abs(minutes) + ' 分 ' + Math.abs(seconds) + ' 秒'
}else {
return str = '距 ' + time + ' 已过去 ' + Math.abs(daysAll+1) + ' 天 ' + Math.abs(hours-8) + ' 时 ' + Math.abs(minutes) + ' 分 ' + Math.abs(seconds) + ' 秒'
}
UTC 和 GMT 都是世界标准时间, 两者差距很小:UTC = GMT +/- 0.9 s
北京时间比UTC时间早8小时,例如:UTC时间是2017年1月1日0点整,北京时间是2017年1月1日早8点整
2. 编写函数getChsDate,功能:转换日期格式,把hh-mm-dd格式数字日期改成中文日期
1. 定义数组字典
2. 利用数组下标筛选字典元素
3. 字典种类:字符串、数组;
字符串中每一个字对应一个下标;数组中每一个元素对应一个下标
字符串字典只有0~10准确;数组字典任意数字都比较精确
function getChsDate(date){
var arr = date.split('-')
var disc = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二', '十三', '十四', '十五', '十六', '十七', '十八', '十九', '二十', '二十一', '二十二', '二十三', '二十四', '二十五', '二十六', '二十七', '二十八', '二十九', '三十', '三十一']
var year = ''
for(var i = 0; i < arr[0].length; i++){
year += disc[arr[0][i]]
}
var month = disc[parseInt(arr[1])] // 需要转换为整数
var day = disc[parseInt(arr[2])]
var result = ''
return result = year + '年' + month + '月' + day + '日'
}
var str = getChsDate('2015-01-08');
console.log(str); // 二零一五年一月八日
3. 编写函数,功能:按参数条件返回字符串
- 参数为时间对象毫秒数的字符串格式,返回值为字符串。
假设参数为时间对象毫秒数 t,根据 t 的时间分别返回如下字符串:
1. 刚刚( t 距当前时间不到1分钟时间间隔)
2. 3分钟前 (t距当前时间大于等于1分钟,小于1小时)
3. 8小时前 (t 距离当前时间大于等于1小时,小于24小时)
4. 3天前 (t 距离当前时间大于等于24小时,小于30天)
5. 2个月前 (t 距离当前时间大于等于30天小于12个月)
6. 8年前 (t 距离当前时间大于等于12个月)
1. 转换参数(毫秒数)为秒数、分钟数、小时数、天数
2. 加入条件判断,根据条件返回相应字符串
3. 判断这个差值符合哪个条件,就返回哪个字符串
function friendlyDate(time){
var stare = Date.now()
secondsAll = Math.abs(stare - time) / 1000
if(secondsAll < 60){ // 秒数;条件判断使用向上乘法更好一些,不用转换整数
return '刚刚'
}else if(parseInt(secondsAll/60) >= 1 && parseInt(secondsAll/60) < 60){ // 分钟数
return '3分钟前'
}else if(parseInt(secondsAll/60/60) >= 1 && parseInt(secondsAll/60/60) < 24){ // 小时数
return '8小时前'
}else if(parseInt(secondsAll/60/60/24) >= 1 && parseInt(secondsAll/60/60/24) < 30){ // 天数
return '3天前'
}else if(parseInt(secondsAll/60/60/24/30) >= 1 && parseInt(secondsAll/60/60/24/30) < 12){ // 月数
return '2个月前'
}else if(parseInt(secondsAll/60/60/24/30/12) >= 1){ // 年数
return '8年前'
}
}
var time = Date.parse('2017-01-01')
var str = friendlyDate(time)
console.log(str) // 3天前
本文章著作权归饥人谷和作者所有,转载须说明来源!
网友评论