1卵凑、寫一個函數(shù)庆聘,返回從min到max之間的 隨機整數(shù),包括min不包括max
random生成0到1之間的隨機數(shù)勺卢,包括0伙判,不包括1
floor方法返回小于參數(shù)值的最大整數(shù)
ceil方法返回大于參數(shù)值的最小整數(shù)
//floor
function getRandomInt(min, max){
return Math.floor((Math.random() * (max - min) + min))
}
//ceil
function getRandomInt(min, max){
return Math.ceil((Math.random() * (max - min) + min)) - 1
}
2、寫一個隨機字符串函數(shù)黑忱,生成一個長度為 n 的隨機字符串宴抚,字符串字符的取值范圍包括0到9勒魔,a到 z,A到Z
function getRandomString(len){
var str = ""
var dict = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" //定義個將要從中取值的字符串字典
for(var i = 0; i < len; i++){
str = str + dict.charAt(Math.random() * dict.length)
}
return str
}
var randomString = getRandomString(5)
console.log(randomString)
3菇曲、寫一個隨機 IP 地址函數(shù)冠绢。生成一個隨機 IP 地址,一個合法的 IP 地址為 0.0.0.0~255.255.255.255
function getRandomIp() {
var ip = []
for(var i = 0; i < 4; i++){
ip.push(Math.floor(Math.random() * 256))
}
return ip.join('.')
}
var randomIp = getRandomIp()
console.log(randomIp)
4常潮、寫一個隨機顏色字符串函數(shù)弟胀。生成一個隨機顏色字符串,合法的顏色為#000000~ #ffffff
function getRandomColor() {
var dict = "0123456789abcdef"
var color = "#"
for(var i = 0; i < 6; i++){
color = color + dict.charAt(Math.floor(Math.random() * dict.length))
}
return color
}
var randomColor = getRandomColor()
console.log(randomColor)
5蕊玷、實現(xiàn)一個flatten函數(shù)邮利,將一個嵌套多層的數(shù)組 array(數(shù)組) (嵌套可以是任何層數(shù))轉換為只有一層的數(shù)組,數(shù)組中元素僅基本類型的元素或數(shù)組垃帅,不存在循環(huán)引用的情況延届。
Ex:
flatten([1, [2], [3, [[4]]]]) => [1, 2, 3, 4];
//方法一:函數(shù)外聲明一個空的全局的數(shù)組,遞歸查找目標數(shù)組贸诚,找到非數(shù)組類型的就存到新數(shù)組中
var newArr = []
function flatten(arr){
arr.map(function(element){
if(Array.isArray(element)){
flatten(element)
}else{
newArr.push(element)
}
})
return newArr
}
var arr = [1, [2, 7, [[9, 5], 19]], [3, [[4]]]]
var result = flatten(arr)
console.log(result)
//方法二:函數(shù)內聲明一個空的數(shù)組,遞歸查找目標數(shù)組方庭,通過concat把內層處理好返回的數(shù)組連接到外層,一層一層向上連接酱固,直到連接到最外層的flatten
function flatten(arr){
var arr2 = []
arr.map(function(element){
if(Array.isArray(element)){
arr2 = arr2.concat(flatten(element))
}else{
arr2.push(element)
}
})
return arr2
}
var arr = [1, [2, 7, [[9, 5], 19]], [3, [[4]]]]
var result = flatten(arr)
console.log(result)
//方法三:reduce實現(xiàn)械念,牛逼方法
function flatten(arr){
return arr.reduce(function(initArr, currentArr){
return initArr.concat(Array.isArray(currentArr) ? flatten(currentArr) : [currentArr])
} ,[])
}
var arr = [1, [2, 7, [[9, 5], 19]], [3, [[4]]]]
var result = flatten(arr)
console.log(result)
6、實現(xiàn)一個reduce函數(shù)运悲,作用和原生的reduce類似
Ex:
var sum = reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0); => 6
實現(xiàn):
1.申請一個新的數(shù)組龄减,用來存放待處理的目標數(shù)組,即根據(jù)是否傳入initValue班眯,arr2是等于 [] .concat(arr)還是等于 [initValue].concat(arr)
2.用splice函數(shù)刪掉arr2數(shù)組的前兩位希停,并把fn處理后得到的結果放入arr2數(shù)組的頭部,如此循環(huán)署隘,直到數(shù)組只剩下一個值
function reduce(arr, fn, initValue){
var arr2 = (initValue === undefined ? [] : [initValue]).concat(arr)
while(arr2.length > 1) //判斷arr2中是否有兩個以上的值
{
console.log(arr2)
arr2.splice(0, 2, fn(arr2[0], arr2[1]))
}
return arr2[0]
}
var result= reduce([1, 2, 3, 4, 5, 6], function(v1, v2){ return v1 + v2; }, 10);
console.log(result)
注:
arr2 = arr這樣對arr2改動會改變arr中的值宠能,就不符合要求了
而,arr2 = [].concat(arr)相當于實現(xiàn)了個簡單的數(shù)組的深拷貝磁餐,arr2和arr互不影響
7违崇、 寫一個函數(shù)getChIntv,獲取從當前時間到指定日期的間隔時間
var str = getChIntv("2017-02-08 10:30:24");
console.log(str);
function getChIntv(specifiedDate){
return Math.abs(Date.now() - Date.parse(specifiedDate))
}
var str = getChIntv("2017-02-08 10:30:24");
console.log(str);
8诊霹、寫一個函數(shù)羞延,參數(shù)為時間對象毫秒數(shù)的字符串格式,返回值為字符串脾还。假設參數(shù)為時間對象毫秒數(shù)t肴楷,根據(jù)t的時間分別返回如下字符串:
- 剛剛( t 距當前時間不到1分鐘時間間隔)
- 3分鐘前 (t距當前時間大于等于1分鐘,小于1小時)
- 8小時前 (t 距離當前時間大于等于1小時荠呐,小于24小時)
- 3天前 (t 距離當前時間大于等于24小時赛蔫,小于30天)
- 2個月前 (t 距離當前時間大于等于30天小于12個月)
- 8年前 (t 距離當前時間大于等于12個月)
function friendlyDate(time){
var intervalTime = Math.abs(Date.now() - time)
if(intervalTime < 1*60*1000){
return '剛剛'
} else if(1*60*1000 <= intervalTime && intervalTime < 1*60*60*1000){
return Math.floor(intervalTime/1000/60) + '分鐘前'
} else if(1*60*60*1000 <= intervalTime && intervalTime < 24*1*60*60*1000){
return Math.floor(intervalTime/1000/60/60) + '小時前'
} else if(24*1*60*60*1000 <= intervalTime && intervalTime < 30*24*1*60*60*1000){
return Math.floor(intervalTime/1000/60/60/24) + '天前'
} else if(30*24*1*60*60*1000 <= intervalTime && intervalTime < 12*30*24*1*60*60*1000){
return Math.floor(intervalTime/1000/60/60/24/30) + '個月前'
} else if(12*30*24*1*60*60*1000 <= intervalTime ){
return Math.floor(intervalTime/1000/60/60/24/30/12) + '年前'
}
}
var str = friendlyDate(Date.now()) // 剛剛
var str2 = friendlyDate('1483941245793')
console.log(str)
console.log(str2)