-
關鍵詞: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天前
本文章著作權歸饑人谷和作者所有,轉載須說明來源!