-
關(guān)鍵詞:Math對(duì)象、Data對(duì)象仗考、數(shù)組Array
一音同、Math任務(wù)
1. 編寫(xiě)函數(shù),功能:返回從min到max之間的隨機(jī)整數(shù)秃嗜,包括min不包括max
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
Math.random() // 返回一個(gè)從0到1之間的偽隨機(jī)數(shù):可以等于0权均,一定小于1
Math.floor() // 返回小于或等于參數(shù)的最大整數(shù)
Math.random() * (max - min) // 最小值為 0 ,最大值無(wú)限接近 差值 -1
Math.floor(Math.random() * (max - min)) // 最小值為 0锅锨,最大值為 差值 -1
Math.floor(Math.random() * (max - min)) + min // 最小值為 min叽赊,最大值為 max-1
2. 編寫(xiě)函數(shù),功能:返回從min都max之間的隨機(jī)整數(shù)必搞,包括min包括max
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
Math.random() * (max - min + 1) // 最小值為 0 必指,最大值無(wú)限接近 差值 +1
Math.floor(Math.random() * (max - min + 1)) // 最小值為 0,最大值為 差值
Math.floor(Math.random() * (max - min + 1)) + min // 最小值為 min恕洲,最大值為 max
3. 編寫(xiě)函數(shù)塔橡,功能:生成一個(gè)長(zhǎng)度為 n 的隨機(jī)字符串,字符串字符的取值范圍包括0到9研侣,a到 z谱邪,A到Z
// 1. 字符串可以通過(guò)類(lèi)數(shù)組下標(biāo)的方法進(jìn)行訪問(wèn)
// 2. 類(lèi)數(shù)組下標(biāo)可以通過(guò) Math.random() 隨機(jī)生成
// 3. 建立一個(gè)字典和一個(gè)空字符串,從字典中隨機(jī)篩選字符放入空字符串中
// 4. 利用循環(huán)控制所要字符串的長(zhǎng)度
// 5. 注意取值范圍和要求
function getRandStr(len){
//補(bǔ)全函數(shù)
var disc = '1234567890abcdefjhigklmnopqrstuvwxyzABCDEFJHIGKLMNOPQRSTUVWXYZ'
var str = ''
for(var i = 0; i < len; i++){
str += disc[Math.floor(Math.random() * 62)]
// (62+1)會(huì)出現(xiàn)undefined庶诡,原因 disc 共有62位,但第62位的下標(biāo)是disc[61]咆课,第1位的下標(biāo)是disc[0]【注意位數(shù)與下標(biāo)的關(guān)系:下標(biāo) = 位數(shù) - 1】
}
return str
}
var result = getRandStr(15)
console.log(result) // mcwNMWGbbEmwodq
console.log(result.length) // 15
4. 編寫(xiě)函數(shù)末誓,功能:生成一個(gè)隨機(jī) IP 地址扯俱,一個(gè)合法的 IP 地址為 0.0.0.0~255.255.255.255
// 直接循環(huán)、隨機(jī)生成4個(gè)數(shù)字喇澡,使用連接符連接4個(gè)數(shù)字
// 第一將循環(huán)結(jié)果push到數(shù)組中迅栅,第二將數(shù)組轉(zhuǎn)化為字符串
function getRandIP(){
//函數(shù)補(bǔ)全
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. 編寫(xiě)函數(shù),功能:生成一個(gè)隨機(jī)顏色字符串晴玖,合法顏色為#000000~ #ffffff
// 制作字典读存,篩選字符
// 循環(huán) 6 次,每次生成 1 個(gè)字符呕屎,組裝顯示
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
二让簿、數(shù)組任務(wù)
1.1 數(shù)組方法里push、pop秀睛、shift尔当、unshift、join蹂安、split分別是什么作用椭迎?
方法 |
作用 |
push |
向數(shù)組的末尾添加一個(gè)或多個(gè)元素,并返回新的長(zhǎng)度田盈,直接修改原數(shù)組 |
pop |
刪除并返回?cái)?shù)組的最后一個(gè)元素畜号,數(shù)組長(zhǎng)度減 1,直接修改原數(shù)組 |
shift |
刪除數(shù)組的第一個(gè)元素允瞧,并返回第一個(gè)元素的值弄兜,直接修改原數(shù)組 |
unshift |
向數(shù)組的開(kāi)頭添加一個(gè)或更多元素,并返回新的長(zhǎng)度瓷式,直接修改原數(shù)組 |
join |
把數(shù)組中的所有元素放入一個(gè)字符串中替饿,元素通過(guò)指定分隔符進(jìn)行分隔 |
split |
把一個(gè)字符串分割成字符串?dāng)?shù)組,字符串通過(guò)指定點(diǎn)進(jìn)行分割 |
splice |
向/從數(shù)組中添加/刪除項(xiàng)目贸典,然后返回被刪除的項(xiàng)目视卢,直接修改原數(shù)組 |
1.2 用 splice函數(shù)分別實(shí)現(xiàn) push、pop廊驼、shift据过、unshift方法
- splice:向數(shù)組中添加元素,或從數(shù)組中刪除元素
語(yǔ)法:arrayObject.splice(index, howmany, item1,.....,itemX)
參數(shù)說(shuō)明:
1. index:必填妒挎;整數(shù)绳锅;定義起始位置;若為負(fù)數(shù)酝掩,起始位置從尾部開(kāi)始計(jì)算
2. howmany:必填鳞芙;需要?jiǎng)h除的元素?cái)?shù)量;若為 0,則不刪除任何元素
3. itemX:選填原朝;向數(shù)組添加的新元素驯嘱;數(shù)量可為多個(gè)
- 1.push:向數(shù)組末尾添加一個(gè)或多個(gè)元素【堆棧】
var arr1 = new Array(1,2,3,4,5)
arr1.splice(arr.length, 0, 6)
console.log(arr1) // [1, 2, 3, 4, 5, 6]
- 2.pop:刪除數(shù)組末尾最后一個(gè)元素【堆椩梗】
var arr2 = new Array(1,2,3,4,5)
arr2.splice(arr.length-1, 1)
console.log(arr2) // [1, 2, 3, 4]
- 3.shift:刪除數(shù)組開(kāi)頭第一個(gè)元素【隊(duì)列】
var arr3 = new Array(1,2,3,4,5)
arr3.splice(0, 1)
console.log(arr3) // [2, 3, 4, 5]
- 4.unshift:向數(shù)組開(kāi)頭添加一個(gè)或多個(gè)元素【隊(duì)列】
var arr4 = new Array(1,2,3,4,5)
arr4.splice(0, 0, 0)
console.log(arr4) // [0, 1, 2, 3, 4, 5]
2. 編寫(xiě)函數(shù)鞠评,功能:操作數(shù)組,數(shù)組中的每一項(xiàng)變?yōu)樵瓉?lái)的平方壕鹉,操作原數(shù)組
// 遍歷數(shù)組 { 計(jì)算平方 }
// 循環(huán)時(shí):將平方結(jié)果賦值替換原數(shù)組元素 —— 使用數(shù)組下標(biāo)
function squareArr(arr){
// 函數(shù)補(bǔ)全
for(var i = 0; i < arr.length; i++){
arr[i] = Math.pow(arr[i], 2)
// arr[i] = arr[i] * arr[i] // 指定每一項(xiàng)的保存位置
}
return arr
}
var arr = [2, 4, 6]
squareArr(arr)
console.log(arr) // [4, 16, 36]
3. 編寫(xiě)函數(shù)剃幌,功能:操作數(shù)組,返回一個(gè)新數(shù)組晾浴,新數(shù)組中只包含正數(shù)负乡,原數(shù)組不變
// 遍歷數(shù)組 { 條件判斷 }
// 聲明新空數(shù)組保存值,最終return值
function filterPositive(arr){
//函數(shù)補(bǔ)全
var emptyArr = []
for(var i = 0; i < arr.length; i++){
if( typeof arr[i] === 'number' && arr[i] > 0){ // 只需要數(shù)字怠肋,且是正數(shù)
emptyArr.push( arr[i] ) // .push 將 參數(shù) 添加到 指定數(shù)組中(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 任務(wù)
1. 編寫(xiě)函數(shù)getChIntv,獲取從當(dāng)前時(shí)間到指定日期的間隔時(shí)間
// 1. 分別獲取當(dāng)前時(shí)間笙各、指定時(shí)間钉答,并計(jì)算差值
// 2. 轉(zhuǎn)換差值顯示格式:毫秒數(shù)轉(zhuǎn)換為指定格式
// 3. 以北京時(shí)間 0 為基準(zhǔn)
function getChIntv(time){
var endLine = Date.parse(time) // 1.傳遞指定時(shí)間
var startLine = Date.now() // 2.獲取當(dāng)前時(shí)間
var interval = endLine - startLine // 3.計(jì)算時(shí)間間隔(可使用Math.abs())
var secondsAll = parseInt(interval/1000) // 4.全部秒數(shù)(需要整數(shù)進(jìn)行計(jì)算)
var seconds = secondsAll % 60 // 5.換算秒數(shù)
var minutesAll = parseInt(secondsAll/60) // 6.全部分鐘數(shù)
var minutes = minutesAll % 60 // 7.換算分鐘數(shù)
var hoursAll = parseInt(minutesAll/60) // 8.全部小時(shí)數(shù)
var hours = hoursAll % 24 // 9.換算小時(shí)數(shù)
var daysAll = parseInt(hoursAll/24) //10.全部天數(shù)
var str = ''
return var str = '距除夕還有 ' + Math.abs(daysAll) + ' 天 ' + Math.abs(hours-8) + ' 時(shí) ' + Math.abs(minutes) + ' 分 ' + Math.abs(seconds) + ' 秒'
}
var str = getChIntv("2017-01-27");
console.log(str); // 距除夕還有 10 天 6 時(shí) 30 分 6 秒
- 記錄 /已過(guò)去/ 或 /未到來(lái)/ 的某個(gè)重要日子
// 根據(jù)條件顯示不同提示:替換上面 return 語(yǔ)句
if((endLine - startLine) > 0){
return str = '距 ' + time + ' 還剩下 ' + Math.abs(daysAll) + ' 天 ' + Math.abs(hours-8) + ' 時(shí) ' + Math.abs(minutes) + ' 分 ' + Math.abs(seconds) + ' 秒'
}else {
return str = '距 ' + time + ' 已過(guò)去 ' + Math.abs(daysAll+1) + ' 天 ' + Math.abs(hours-8) + ' 時(shí) ' + Math.abs(minutes) + ' 分 ' + Math.abs(seconds) + ' 秒'
}
UTC 和 GMT 都是世界標(biāo)準(zhǔn)時(shí)間, 兩者差距很需厩馈:UTC = GMT +/- 0.9 s
北京時(shí)間比UTC時(shí)間早8小時(shí)数尿,例如:UTC時(shí)間是2017年1月1日0點(diǎn)整,北京時(shí)間是2017年1月1日早8點(diǎn)整
2. 編寫(xiě)函數(shù)getChsDate惶楼,功能:轉(zhuǎn)換日期格式右蹦,把hh-mm-dd格式數(shù)字日期改成中文日期
1. 定義數(shù)組字典
2. 利用數(shù)組下標(biāo)篩選字典元素
3. 字典種類(lèi):字符串、數(shù)組歼捐;
字符串中每一個(gè)字對(duì)應(yīng)一個(gè)下標(biāo)何陆;數(shù)組中每一個(gè)元素對(duì)應(yīng)一個(gè)下標(biāo)
字符串字典只有0~10準(zhǔn)確;數(shù)組字典任意數(shù)字都比較精確
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])] // 需要轉(zhuǎn)換為整數(shù)
var day = disc[parseInt(arr[2])]
var result = ''
return result = year + '年' + month + '月' + day + '日'
}
var str = getChsDate('2015-01-08');
console.log(str); // 二零一五年一月八日
3. 編寫(xiě)函數(shù)豹储,功能:按參數(shù)條件返回字符串
- 參數(shù)為時(shí)間對(duì)象毫秒數(shù)的字符串格式贷盲,返回值為字符串。
假設(shè)參數(shù)為時(shí)間對(duì)象毫秒數(shù) t剥扣,根據(jù) t 的時(shí)間分別返回如下字符串:
1. 剛剛( t 距當(dāng)前時(shí)間不到1分鐘時(shí)間間隔)
2. 3分鐘前 (t距當(dāng)前時(shí)間大于等于1分鐘巩剖,小于1小時(shí))
3. 8小時(shí)前 (t 距離當(dāng)前時(shí)間大于等于1小時(shí),小于24小時(shí))
4. 3天前 (t 距離當(dāng)前時(shí)間大于等于24小時(shí)钠怯,小于30天)
5. 2個(gè)月前 (t 距離當(dāng)前時(shí)間大于等于30天小于12個(gè)月)
6. 8年前 (t 距離當(dāng)前時(shí)間大于等于12個(gè)月)
1. 轉(zhuǎn)換參數(shù)(毫秒數(shù))為秒數(shù)佳魔、分鐘數(shù)寿羞、小時(shí)數(shù)愕宋、天數(shù)
2. 加入條件判斷供屉,根據(jù)條件返回相應(yīng)字符串
3. 判斷這個(gè)差值符合哪個(gè)條件渡讼,就返回哪個(gè)字符串
function friendlyDate(time){
var stare = Date.now()
secondsAll = Math.abs(stare - time) / 1000
if(secondsAll < 60){ // 秒數(shù)试溯;條件判斷使用向上乘法更好一些拜姿,不用轉(zhuǎn)換整數(shù)
return '剛剛'
}else if(parseInt(secondsAll/60) >= 1 && parseInt(secondsAll/60) < 60){ // 分鐘數(shù)
return '3分鐘前'
}else if(parseInt(secondsAll/60/60) >= 1 && parseInt(secondsAll/60/60) < 24){ // 小時(shí)數(shù)
return '8小時(shí)前'
}else if(parseInt(secondsAll/60/60/24) >= 1 && parseInt(secondsAll/60/60/24) < 30){ // 天數(shù)
return '3天前'
}else if(parseInt(secondsAll/60/60/24/30) >= 1 && parseInt(secondsAll/60/60/24/30) < 12){ // 月數(shù)
return '2個(gè)月前'
}else if(parseInt(secondsAll/60/60/24/30/12) >= 1){ // 年數(shù)
return '8年前'
}
}
var time = Date.parse('2017-01-01')
var str = friendlyDate(time)
console.log(str) // 3天前
本文章著作權(quán)歸饑人谷和作者所有寸莫,轉(zhuǎn)載須說(shuō)明來(lái)源尖滚!