寫一個(gè)隨機(jī)整數(shù)函數(shù)
返回從min到max之間的 隨機(jī)整數(shù)破喻,包括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)
}
寫一個(gè)隨機(jī)字符串函數(shù)
生成一個(gè)長度為 n 的隨機(jī)字符串,字符串字符的取值范圍包括0到9盟榴,a到 z曹质,A到Z。
function getRandStr(len){
var str = '' // 聲明需要的是一個(gè)字符串
var dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' // 聲明字符串的取值范圍
for(var i = 0; i < len; i++){ // 使用for循環(huán)來執(zhí)行多次范圍取值
var x= Math.floor(Math.random()*dict.length) // 從字符串取值范圍中擎场,隨機(jī)出一個(gè)下標(biāo)數(shù)作為本次取到的值
str = str + dict[x] // 將本次取到的值和元字符串做運(yùn)算拼接字符串
}
return str // 返回循環(huán)結(jié)束后的字符串
}
getRandStr(x); // 填寫需要的字符串長度以驗(yàn)證函數(shù)正確性
寫一個(gè)隨機(jī) IP 地址函數(shù)
生成一個(gè)隨機(jī) IP 地址羽德,一個(gè)合法的 IP 地址為 0.0.0.0~255.255.255.255
function getRandIP(ip){
var arr = [] // 聲明儲(chǔ)存IP地址的對(duì)象是個(gè)數(shù)組
for(var i = 0; i < 4; i++){ // 使用for循環(huán)來取4次值
var x = Math.floor(Math.random()*256) //使用floor方法,將0-255的隨機(jī)整數(shù)賦值給x
arr.unshift(x) // 在ip數(shù)組中添加剛?cè)〉降碾S機(jī)值
}
return arr // 返回循環(huán)結(jié)束后的arr數(shù)組
}
var ip = getRandIP() // 將函數(shù)執(zhí)行完畢的數(shù)組賦值給ip
console.log(ip.join('.')) // 使用join方法將數(shù)組以'.'連接并輸出
寫一個(gè)隨機(jī)顏色字符串函數(shù)
生成一個(gè)隨機(jī)顏色字符串迅办,合法的顏色為#000000~ #ffffff
function getRandColor(){
var str = '#' // // 聲明需要的是一個(gè)字符串
var dict = '0123456789abcdef' // 聲明字符串的取值范圍是十六進(jìn)制數(shù)
for(var i = 0; i < 6; i++){ // 使用for循環(huán)來執(zhí)行6范圍取值
var x= Math.floor(Math.random()*dict.length) // 從字符串取值范圍中宅静,隨機(jī)出一個(gè)下標(biāo)數(shù)作為本次取到的值
str = str + dict[x] // 將本次取到的值和元字符串做運(yùn)算拼接字符串
}
return str // 返回循環(huán)結(jié)束后的字符串
}
var color = getRandColor() // 將函數(shù)執(zhí)行完畢的數(shù)組賦值給ip
console.log(color) // 輸出'#'之后的留個(gè)隨機(jī)十六進(jìn)制數(shù)
實(shí)現(xiàn)一個(gè)flatten函數(shù)
將一個(gè)嵌套多層的數(shù)組 array(數(shù)組) (嵌套可以是任何層數(shù))轉(zhuǎn)換為只有一層的數(shù)組,數(shù)組中元素僅基本類型的元素或數(shù)組站欺,不存在循環(huán)引用的情況姨夹。
看的有些懵逼纤垂,我等到視頻上傳后看看相關(guān)部分再做解答吧
eg:
flatten([1, [2], [3, [[4]]]]) => [1, 2, 3, 4];
實(shí)現(xiàn)一個(gè)reduce函數(shù)
作用和原生的reduce類似
reduce方法的作用是遍歷數(shù)組,調(diào)用回調(diào)函數(shù)匀伏,將數(shù)組元素組合成一個(gè)值
function likeReduce(arr, method, initValue){ // 聲明函數(shù)洒忧,并有3個(gè)參數(shù):初始數(shù)組、調(diào)用方法/函數(shù)够颠、初始值
var tagArr = (initValue === undefined ? [] : [initValue]).concat(arr)
//定義一個(gè)函數(shù)體內(nèi)的數(shù)組熙侍,并判斷是否有初始值,如果有則拼接履磨,沒有則為空數(shù)組
while(tagArr.length > 1){
tagArr.splice(0, 2, method(tagArr[0], tagArr[1]))
// 數(shù)組長度>1時(shí)蛉抓,使用.splice方法,將數(shù)組前兩個(gè)元素刪除并用新元素代替剃诅,新元素調(diào)用method方法進(jìn)行計(jì)算
}
return tagArr[0] // 將調(diào)用method方法得到的新元素作為數(shù)組的首個(gè)元素
}
// 測(cè)試函數(shù)
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)
寫一個(gè)函數(shù)getChIntv
獲取從當(dāng)前時(shí)間到指定日期的間隔時(shí)間
function getChIntv(x){
var today = Date.parse(new Date()) // 使用parse方法獲取 當(dāng)前 時(shí)間距離70年1月1日的間隔時(shí)間
var targerDay = Date.parse(x) // 使用parse方法獲取 目標(biāo) 時(shí)間距離70年1月1日的間隔時(shí)間
return today - targerDay // 將當(dāng)前巷送、目標(biāo)日期相對(duì)70年的間隔的時(shí)間,做減法運(yùn)算得到當(dāng)前和目標(biāo)日期的間隔
}
var str = getChIntv("2017-02-08T10:30:24"); // 將函數(shù)執(zhí)行完畢的數(shù)組賦值給str
console.log(str); // 輸出計(jì)算得出的時(shí)間間隔
寫一個(gè)函數(shù)
參數(shù)為時(shí)間對(duì)象毫秒數(shù)的字符串格式矛辕,返回值為字符串笑跛。假設(shè)參數(shù)為時(shí)間對(duì)象毫秒數(shù)t,根據(jù)t的時(shí)間分別返回如下字符串:
- 剛剛( t 距當(dāng)前時(shí)間不到1分鐘時(shí)間間隔)
- 3分鐘前 (t距當(dāng)前時(shí)間大于等于1分鐘聊品,小于1小時(shí))
- 8小時(shí)前 (t 距離當(dāng)前時(shí)間大于等于1小時(shí)飞蹂,小于24小時(shí))
- 3天前 (t 距離當(dāng)前時(shí)間大于等于24小時(shí),小于30天)
- 2個(gè)月前 (t 距離當(dāng)前時(shí)間大于等于30天小于12個(gè)月)
- 8年前 (t 距離當(dāng)前時(shí)間大于等于12個(gè)月)
/*
1分鐘:60000ms
3分鐘:180000ms
8小時(shí):28800000ms
3天:259200000ms
2個(gè)月:5184000000ms(60天)
8年:252288000000ms
*/
//函數(shù)體如下
function friendlyDate(time){
var time // 聲明一個(gè)time變量
switch(true){ // 使用switch語句翻屈,將變量和對(duì)應(yīng)的時(shí)間進(jìn)行比較運(yùn)算陈哑,并將相應(yīng)的字符串賦值給變量
case time <= 60000:
time = '剛剛'
break
case time > 60000 && time <= 180000:
time = '3分鐘內(nèi)'
break
case time > 180000 && time <= 28800000:
time = '8小時(shí)內(nèi)'
break
case time > 28800000 && time <= 259200000:
time = '3天內(nèi)'
break
case time > 259200000 && time <= 5184000000:
time = '2個(gè)月內(nèi)'
break
case time > 5184000000 && time <= 252288000000:
time = '8年內(nèi)'
break
default:
time = '這是墳不要挖'
}
return time // 返回賦值后的變量
}
var str = friendlyDate( '1' ) // 輸出任意毫秒數(shù)的數(shù)字或字符串,查詢是否成功