為什么要做這么多的練習:一下每個模塊涉及4-5個練習,都是企業開發中經常遇到的經典情景.很有必要熟悉代碼,自己思考過一遍思路.
Math任務
1、寫一個函數,返回從min到max之間的 隨機整數,包括min不包括max
function rand(min,max){
var a = Math.floor(Math.random()*(max - min) +min);
console.log(a);
}
rand(0,10);
//Math.random()函數返回0和1之間的偽隨機數,可能為0,但總是小于1,[0,1)
//floor方法返回小于參數值的最大整數
2、寫一個函數,返回從min都max之間的 隨機整數,包括min包括max
function rand(min,max){
var a = Math.round(Math.random()*(max - min) +min);
console.log(a);
}
rand(0,10);
//round(x):把數四舍五入為最接近的整數
3、寫一個函數,生成一個長度為 n 的隨機字符串,字符串字符的取值范圍包括0到9,a到 z,A到Z。
function getRandStr(len){
var str1 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var result = '';
for(var i = 0;i<len; i++){
result += str1[Math.floor(Math.random() * (str1.length))];//數組下標從0開始,所以選floor
}
return result;
}
var str = getRandStr(10);
console.log(str);
//思路:把所有目標0~z的集合用數組的下標取.
4、寫一個函數,生成一個隨機 IP 地址,一個合法的 IP 地址為 0.0.0.0~255.255.255.255
function randIp(){
var arr = [];
for(var i = 0; i<4; i++){
arr[i] = Math.floor(Math.random() *256);//易忘arr的[i],不是+=
}
return arr.join('.');
}
var str = randIp();
console.log(str);
5、寫一個函數,生成一個隨機顏色字符串,合法的顏色為#000000~ #ffffff
function getRandColor(){
var str = '0123456789abcdef'; //16位
var result = '';
for(var i = 0; i < 6; i++ ){
result += str[ Math.floor(Math.random() * (str.length))];
}
return ('#' + result);
}
var color = getRandColor();
console.log(color); // #3e2f1b
//孰能生巧,第一題會了其他題套路一樣
數組任務
1、數組方法里push、pop、shift、unshift、join、splice分別是什么作用?用 splice函數分別實現push、pop、shift、unshift方法
- push:將一個或多個元素添加到數組的末尾并返回數組的新長度。
//splice函數實現push
var arr = ['a','b','c','d'];
arr.splice(arr.length, 0, 'ha');
console.log(arr); //["a", "b", "c", "d", "ha"]
- pop:從數組中刪除最后一個元素并返回該元素,此方法更改數組的長度
//splice函數實現pop
var arr2 = ['a','b','c','d'];
arr2.splice(arr2.length-1, 1);
console.log(arr2); //["a", "b", "c"]
- shift:從數組中刪除第一個元素并返回該元素,此方法更改數組的長度。
//splice函數實現shift
var arr3 = ['a','b','c','d'];
arr3.splice(0, 1);
console.log(arr3); //["b", "c", "d"]
- unshift:將一個或多個元素添加到數組的開頭,并返回新數組的新長度。
//splice函數實現unshift
var arr = ['a','b','c','d'];
arr.splice(0, 1,'ha','he');
console.log(arr); //["ha", "he", "b", "c", "d"]
join:該方法將數組(或數組類對象的)所有元素連接到字符串中,返回連接了所有數組元素的字符串.
splice:該方法通過刪除現有元素和/或添加新元素來更改數組的內容.
還可參考我這篇簡書
2、寫一個函數,操作數組,數組中的每一項變為原來的平方,在原數組上操作
function squareArr(arr){
for(var i = 0; i<arr.length; i++){
arr[i] = arr[i] * arr[i];
}
return arr;
}
var arr = [2, 4, 6];
squareArr(arr);
console.log(arr); // [4, 16, 36]
3、寫一個函數,操作數組,返回一個新數組,新數組中只包含正數,原數組不變
function filterPositive(arr){
var arr1 = [];
for(var i = 0; i<arr.length;i++){
if(arr[i]>0 && typeof(arr[i]) === 'number'){
arr1.push(arr[i]);
}
}
return arr1;
}
var arr = [3, -1, 2, '饑人谷', true];
var newArr = filterPositive(arr);
console.log(newArr); //[3, 2]
console.log(arr); //[3, -1, 2, '饑人谷', true]
Date 任務
1、 寫一個函數getChIntv,獲取從當前時間到指定日期的間隔時間
法1:好理解
function fn(Datestr){
var now = new Date();
var end = new Date(Datestr);
var times = (end.getTime() - now.getTime())/1000;//總秒數
var day = parseInt(times/3600/24);//總天數
var hour = parseInt( (times - day*3600*24)/3600);//小時
var minute = parseInt((times - day*24*3600 - hour*3600)/60);
var second = parseInt(times - day*24*3600 - hour*3600 - minute*60);
var time = '距離白富美回我微信還有:' + day + '天' + hour + '小時' + minute + '分' + second + '秒';
console.log(time);
}
fn('2017/11/11');
法2:
function getChIntv(t_date){
var now = new Date();
var end = new Date(t_date);
var times = (end.getTime() - now.getTime())/1000;//秒
var d = parseInt(times/ (60*60*24));//天
var h = parseInt(times % (60*60*24)/(60*60));//
var m = parseInt(times % (60*60)/(60));
var s = parseInt(times % (60)/(1000));
return '距離女神洗完澡還有:' + d + "天" + h +"小時" + m + "分" + s + "秒";
}
var str = getChIntv("2017-10-01");
console.log(str);
date筆記:
parseInt() 函數可解析一個字符串,并返回一個整數
getTime() :返回 Date 對象與'1970/01/01 00:00:00'之間的毫秒值(北京時間的時區為東8區,起點時間實際為:'1970/01/01 08:00:00') 。
getDate()從 Date 對象返回一個月中的某一天 (1 ~ 31)。
getDay()從 Date 對象返回一周中的某一天 (0 ~ 6)。
創建 Date 對象的語法:
var myDate=new Date()
注釋:Date 對象會自動把當前日期和時間保存為其初始值。
返回值:
{Date} 返回一個轉換后的 Date 對象。
示例:
[js] view plaincopy
var dt = new Date('2014/12/25'); // yyyy/MM/dd
console.log(dt); // => {Date}:2014/12/25 00:00:00
dt = new Date('2014/12/25 12:00:00'); // yyyy/MM/dd HH:mm:ss
console.log(dt); // => {Date}:2014/12/25 12:00:00
dt = new Date('2014-12-25'); // yyyy-MM-dd
console.log(dt); // => {Date}:2014-12-25 08:00:00 (加上了東8區的時區)
dt = new Date('2014-12-25 12:00:00'); // yyyy-MM-dd HH:mm:ss (注意:此轉換方式在IE中會報錯!)
console.log(dt); // => {Date}:2014-12-25 12:00:00
2、把hh-mm-dd格式數字日期改成中文日期
//把hh-mm-dd格式數字日期改成中文日期
function getChsDate(date){
var arr = ["零","一","二","三","四","五","六","七","八","九","十",
"十一","十二","十三","十四","十五","十六","十七","十八","十九","二十",
"二十一","二十二","二十三","二十四","二十五","二十六","二十七","二十八",
"二十九","三十","三十一"];
var arr1 = date.split('-');//['2015','01','08']
var year = '',month = '',day = '';//分為三部分
for(var i in arr1[0]){
year += arr[arr1[0][i]];
}
month = arr[parseInt(arr1[1])];
day = arr[parseInt(arr1[2])];
return year +'年' +month +'月' +day +'日';
}
var str = getChsDate('2015-11-28');
console.log(str); // "二零一五年十一月二十八日"
3、寫一個函數,參數為時間對象毫秒數的字符串格式,返回值為字符串。假設參數為時間對象毫秒數t,根據t的時間分別返回如下字符串:
剛剛( t 距當前時間不到1分鐘時間間隔)
3分鐘前 (t距當前時間大于等于1分鐘,小于1小時)
8小時前 (t 距離當前時間大于等于1小時,小于24小時)
3天前 (t 距離當前時間大于等于24小時,小于30天)
2個月前 (t 距離當前時間大于等于30天小于12個月)
8年前 (t 距離當前時間大于等于12個月)
<script>
function friendlyDate(time) {
var now = Date.now();//當前時間
// console.log('now: ' + now);
// console.log('time: ' + time);
var timeDiffer = (now - time) / 1000;//相減
// console.log(timeDiffer);
if (timeDiffer < 60) {
console.log('剛剛');
} else if (timeDiffer < 60 * 60) {
console.log('3分鐘前');
} else if (timeDiffer < 24 * 60 * 60) {
console.log('8小時前');
}
else if (timeDiffer < 30 * 24 * 60 * 60) {
console.log('3天前');
}
else if (timeDiffer < 12 * 30 * 24 * 60 * 60) {
console.log('2個月前');
} else {
console.log('8年前');
}
}
var str = friendlyDate('1493287221905');
// console.log(str);// 1分鐘前
var str2 = friendlyDate('1483941245793'); //4天前
</script>