Math數組Date

Math

1、寫一個函數,返回從min到max之間的隨機整數,包括min不包括max
  function random(a,b){
    return a+Math.floor(Math.random()*(b-a))
  }
2、寫一個函數,返回從min都max之間的隨機整數,包括min包括max
  function random(a,b){
    return a+Math.floor(Math.random()*(b-a+1))
  }
3、寫一個函數,生成一個長度為 n 的隨機字符串,字符串字符的取值范圍包括0到9,a到 z,A到Z。
  function random(a,b){
    return a+Math.floor(Math.random()*(b-a))
  }
  // 返回隨機字符串
  function getRandStr(len){
     var dict='1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
     var str = ''
      for(var i = 0 ; i < len ;i++){
        str = str +dict[random(0,62)]
      }
      return str;
   }
   var str = getRandStr(10);
   console.log(str)  //隨機輸出一個10位的字符串
4、寫一個函數,生成一個隨機 IP 地址,一個合法的 IP 地址為 0.0.0.0~255.255.255.255
  function random(a,b){
    return a+Math.floor(Math.random()*(b-a))
  }
  // 隨機獲取ip
  function getRandIP(){
    var arr = []    //聲明一個空數組
    for(var i =0;i<4;i++){
      arr.push(random(0,256))
    }
  return arr.join('.')    //每個數值中間添加'.'分割
  }
  var ip = getRandIP()
  console.log(ip) // 10.234.121.45
5、寫一個函數,生成一個隨機顏色字符串,合法的顏色為#000000~ #ffffff
  function random(a,b){
    return a+Math.floor(Math.random()*(b-a))
  }
  function getRandColor(){
    var dict='0123456789ABCDEFabcdef'  //隨機庫
    var str = ''     
      for(var i = 0 ; i < 6 ;i++){
        str = str +dict[random(0,22)];
      }
        return '#' + str; 
      }
  var color = getRandColor()
  console.log(color)  //隨機輸出一個顏色

數組

1、數組方法里push、pop、shift、unshift、join、splice分別是什么作用?用 splice函數分別實現push、pop、shift、unshift方法
  • push,pop(棧方法)

我們很多時候希望刪除中間一個元素后,后面元素的index都自動減一,數組length同時減一,就好像在一個堆棧中拿去的一個,數組已經幫我們做好了這種操作方式,poppush能夠讓我們使用堆棧那樣先入后出使用數組。
作用:push用來在數組末尾添加數值pop用來刪除數組末尾一個數值

  var a = new Array(1,2,3);
  a.push(4);   //在末尾添加數值4
  console.log(a);//[1, 2, 3, 4]
  console.log(a.length);//4
  console.log(a.pop());//4
  console.log(a); //[1, 2, 3]
  console.log(a.length);//3
  • shift,unshift(隊列方法)

既然棧方法都實現了,先入先出的隊列怎么能少,shift方法可以刪除數組index最小元素,并使后面元素index都減一,length也減一,這樣使用shift/push就可以模擬隊列了,當然與shift方法對應的有一個unshift方法,用于向數組頭部添加一個元素
作用:unshift往數組的第一個位置添加一個數值;shift刪除數組的第一個數值

  var a=new Array(1,2,3);
  a.unshift(4);   //數組第一位添加數值4
  console.log(a);//[4, 1, 2, 3]
  console.log(a.length);//4    
  console.log(a.shift());//4    //刪除數組第一位
  console.log(a); //[1, 2, 3]
  console.log(a.length);//3
  • join

這個方法在C#等語言中也有,作用是把數組元素(對象調用其toString()方法)使用參數作為連接符連接成一字符串,不會修改原數組內容

  var a = new Array(1,2,3,4,5);
  console.log(a.join(',')); //1,2,3,4,5
  console.log(a.join(' ')); //1 2 3 4 5
  • splice(終極神器)推薦指數:★★★★★

JavaScript提供了一個splice方法用于一次性解決數組添加、刪除(這兩種方法一結合就可以達到替換效果),方法有三個參數

  • 1.開始索引
  • 2.刪除元素的位移
  • 3.插入的新元素,當然也可以寫多個
    splice方法返回一個由刪除元素組成的新數組,沒有刪除則返回空數組
  var a = new Array(1,2,3,4,5);
刪除

指定前兩個參數,可以使用splice刪除數組元素,同樣會帶來索引調整及length調整

  var a = new Array(1,2,3,4,5);
  console.log(a.splice(1,3));//[2, 3, 4]
  console.log(a.length);//2
  console.log(a);//[1,5]

如果數組索引不是從0開始的,那么結果會很有意思,有一這樣數組

  var a = new Array();
  a[2]=2;
  a[3]=3;
  a[7]=4;
  a[8]=5;
console.log(a.splice(3,4)); //[3]
console.log(a.length); //5
console.log(a); //[2: 2, 3: 4, 4: 5]

上面例子可以看到,splice的第一個參數是絕對索引值,而不是相對于數組索引,第二個參數并不是刪除元素的個數,而是刪除動作執行多少次,并不是按數組實際索引移動,而是連續移動。同時調整后面元素索引,前面索引不理會

插入與替換

只要方法第二個參數,也就是刪除動作執行的次數設為0,第三個參數及以后填寫要插入內容就splice就能執行插入操作,而如果第二個參數不為0則變成了先在該位置刪除再插入,也就是替換效果

  var a = new Array(1,2,3,4,5);
  a.splice(1,0,9,99,999);
  console.log(a.length); //8
  console.log(a);//[1, 9, 99, 999, 2, 3, 4, 5]
  a.splice(1,3,8,88,888);
  console.log(a.length);//8
  console.log(a);//[1, 8, 88, 888, 2, 3, 4, 5]
  • 用 splice函數分別實現push、pop、shift、unshift方法
  var arr = [1,2,3,4,5,6,7]
  arr.splice(7,0,8)   //相當于arr.push(8)在末尾添加數值8
  arr.splice(7,1)   //8  相當于arr.pop()  刪除最后一個數值 
  arr.splice(0,0,1)   // 相當于arr.unshift(0)  在數組首添加數值0 
  arr.splice(0,1)    // 相當于arr.shift() 刪除數組首個數值
  

其他操作

  • slice(start,end)

不要和splice方法混淆,slice方法用于返回數組中一個片段或子數組,如果只寫一個參數返回參數到數組結束部分,如果參數出現負數,則從數組尾部計數(-3意思是數組倒第三個,一般人不會這么干,但是在不知道數組長度,想舍棄后n個的時候有些用,不過數組長度很好知道。。。。,好糾結的用法),如果start大于end返回空數組,值得注意的一點是slice不會改變原數組,而是返回一個新的數組
(通俗的來講,抽出一個數組,start是開始的數組位置,end是結束的數組位置,如果end為負就是倒著數,start>end(除非為負值),不會影響原數組)

  var a = new Array(1,2,3,4,5);
  console.log(a); //[1, 2, 3, 4, 5]
  console.log(a.slice(1,2));//2
  console.log(a.slice(1,-1));//[2, 3, 4]
  console.log(a.slice(3,2));//[]
  console.log(a); //[1, 2, 3, 4, 5]
  • concat(array)

看起來像是剪切,但這個真不是形聲字,concat方法用于拼接數組,a.concat(b)返回一個a和b共同組成的新數組,同樣不會修改任何一個原始數組,也不會遞歸連接數組內部數組

  var a = new Array(1,2,3,4,5);
  var b = new Array(6,7,8,9);
  console.log(a.concat(b));//[1, 2, 3, 4, 5, 6, 7, 8, 9]
  console.log(a); //[1, 2, 3, 4, 5]
  console.log(b); //[6, 7, 8, 9]
  • reverse()

方法用于將數組逆序,與之前不同的是它會修改原數組

  var a = new Array(1,2,3,4,5);
  a.reverse();
  console.log(a); //[5, 4, 3, 2, 1]

同樣,當數組索引不是連續或以0開始,結果需要注意

  var a = new Array();
  a[2]=2;
  a[3]=3;
  a[7]=4;
  a[8]=5;
  a.reverse();
  • sort

sort方法用于對數組進行排序,當沒有參數的時候會按字母表升序排序,如果含有undefined會被排到最后面,對象元素則會調用其toString方法,如果想按照自己定義方式排序,可以傳一個排序方法進去,很典型的策略模式,同樣sort會改變原數組。

  var a=new Array(5,4,3,2,1);
  a.sort();
  console.log(a);//[1, 2, 3, 4, 5]

但是。。。

  var a=new Array(7,8,9,10,11);
  a.sort();
  console.log(a);//[10, 11, 7, 8, 9]

因為按照字母表排序,7就比10大了,這時候我們需要傳入自定義排序函數

  var a = new Array(7,8,9,10,11);

  a.sort(function(v1,v2){
      return v1-v2;
  });
  console.log(a);//[7, 8, 9, 10, 11]

sort內部使用快速排序,每次比較兩個元素大小的時候如果沒有參數,則直接判斷字母表,如果有參數,則把正在比較的兩個參數傳入自定義方法并調用(正在比較的兩個數會傳給自定義方法的v1、v2),如果返回值大于0表示v1 > v2,如果等于0,表示v1 = v2,如果小于0,表示v1 < v2,其實我們傳入的方法就是告訴sort怎么比較兩個元素誰大誰小,至于排序移動元素過程人家寫好了

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 newArr = [];
    for(var i = 0; i < arr.length; i++){
        if(arr[i] > 0 && arr[i] !== true){
            newArr.push(arr[i]);
        }
    }
    return nweArr;
    }
  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,獲取從當前時間到指定日期的間隔時間
  function getChintv(dateStr){
    var targetDate = new Date(dateStr);    //獲取截止時間
    var presentDate = new Date();    //當前時間設置
    var offset = Math.abs(targetDate-presentDate);    
    //目標時間減去當前時間

    var totalSeconds = Math.abs(offset/1000);  //總毫秒轉化為總秒數
    var second = Math.floor(totalSeconds%60);  //求余,得到秒數
    var totalMinutens = totalSeconds/60;    //總秒數轉為總分鐘
    var minuten = Math.floor(totalMinutens%60);  //求余,得到分鐘
    var totalHours = totalMinutens/60;  //總分鐘數轉為總小時數
    var hours = Math.floor(totalHours%60);  //求余,得到小時
    var totalDays = totalHours/60;  //總小時數轉為總天數
    var days = Math.floor(totalDays%24);  //求余,得到天數
    
    return days + '天' + hours + '小時' + minuten + '分' + second + '秒'
        }
  var d = getChintv('2017-10-8')
  console.log(d);  // 輸出時間
2、把hh-mm-dd格式數字日期改成中文日期
  function getChsDate(str){
    var dict = ["零","一","二","三","四","五","六","七","八","九","十","十一",
    "十二","十三","十四","十五","十六","十七","十八","十九","二十","二十一",
    "二十二","二十三","二十四","二十五","二十六","二十七","二十八","二十九","三十",
    "三十一"];  //漢字數組
    var arr = str.split('-');    //去掉-,變為數組
    var totalYear = arr[0];    
    var totalMonth = arr[1];
    var totalDay = arr[2];

    var year = dict[totalYear[0]] + dict[totalYear[1]] + dict[totalYear[2]] 
               + dict[totalYear[3]] + '年';
    var month = dict[totalMonth[0]] + dict[totalMonth[1]] + '月';
    var day = dict[totalDay[0]] + dict[totalDay[1]]+'日'

    return year + month + day;
  }

  var str = getChsDate('2015-01-08');
  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個月)
  function friendlyDate(time){
    var offset = Date.now()-time;
      if(offset<(60*1000)){
        console.log("剛剛")
      }else if(offset<(60*60*1000)){
        console.log(Math.floor(offset/(60*1000))+'分鐘前')
      }else if(offset<(24*60*60*1000)){
        console.log(Math.floor(offset/(60*60*1000))+'小時前')
      }else if(offset<(30*24*60*60*1000)){
        console.log(Math.floor(offset/(24*60*60*1000))+'天前')
      }else if(offset<(12*30*24*60*60*1000)){
        console.log(Math.floor(offset/(30*24*60*60*1000))+'月前')
      }else{
        console.log(Math.floor(offset/(12*30*24*60*60*1000))+'年前')
      }
    }
  var str = friendlyDate( '1484286699422' ) //  6個月前
  var str2 = friendlyDate('1483941245793') //7個月前
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,119評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,382評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,038評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,853評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,616評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,112評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,192評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,355評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,869評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,727評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,928評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,467評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,165評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,570評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,813評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,585評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,892評論 2 372

推薦閱讀更多精彩內容

  • Math任務 1. 寫一個函數,返回從min到max之間的隨機整數,包括min不包括max 如下: 2. 寫一個函...
    _李祺閱讀 246評論 0 0
  • Math Math對象是JavaScript的內置對象,提供一系列數學常數和數學方法。Math對象只提供了靜態的屬...
    yuhuan121閱讀 175評論 0 0
  • Math 1.寫一個函數,返回從min到max之間的 隨機整數,包括min不包括max 2.寫一個函數,返回從mi...
    饑人谷_bigJiao閱讀 573評論 0 0
  • Math任務 1、寫一個函數,返回從min到max之間的隨機整數,包括min不包括max
    湖衣閱讀 278評論 0 0
  • 寫一個函數,返回從min到max之間的 隨機整數,包括min不包括max 寫一個函數,返回從min都max之間的 ...
    LeeoZz閱讀 305評論 0 0