Math+Aarry+Date練習

為什么要做這么多的練習:一下每個模塊涉及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 

參考Date
參考極客data

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>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容

  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創建并操作數組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,264評論 0 4
  • 實驗設置是1,000,000輪,我覺得收斂速度是硬傷。從500以后就看不出變化了。有因為速度太慢,循環到6200多...
    WilliamY閱讀 1,730評論 0 0
  • 對于中國人而言,“吃”從自古以來都是一門極深的學問。油煎爆炒蒸煮紅燒清燉,不管什么做法,都講究色香味俱全。 就算是...
    健身客閱讀 256評論 0 2
  • 先來張圖 “夫醫貴有才,若無才,何足應變無窮”這是在變相的夸自己有才嘛~ 這是攻邪學派大家張子和的一篇醫案,講的是...
    樸哩閱讀 291評論 0 0
  • 創業類 在這里吃著牛肉,思考著明天的自己 上善若水,厚德載物,天道酬勤 腳踏實地出真知,勤學苦練得精英 志存高遠,...
    也牛閱讀 265評論 0 1