實現(xiàn)一些常見的函數(shù)

寫一個函數(shù),返回從min到max之間的 隨機整數(shù),包括min不包括max

function minmax(min,max){
    return  min + Math.floor(Math.random()*(max-min))
}

minmax(2,6)//2 3 4 5

寫一個函數(shù),返回從min都max之間的 隨機整數(shù),包括min包括max

function minmax(min,max){
    return  min + Math.floor(Math.random()*(max-min+1))
}
minmax(2,6)//2 3 4 5 6

寫一個函數(shù),生成一個長度為 n 的隨機字符串,字符串字符的取值范圍包括0到9,a到 z,A到Z。

可以配置想要隨機的字符
function getRandStr(len,char){
  // 意識到charAt就很輕松了,用possible[]也可以
    var possible = char || "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    var str = '';
    for(var j=0;j<len;j++){
      //每次循環(huán)隨機一個字符
      str += possible.charAt(Math.floor(Math.random() * possible.length))    
    }
    return str
    
}
function getRandStr(len){
      var str =''
      var randomchar=function(){
        var n= Math.floor(Math.random()*62);
        if(n<10) return n; //1-10   其實數(shù)字也可以向下面這樣寫:48-57
        if(n<36) return String.fromCharCode(n+55); //A-Z  65-90
        return String.fromCharCode(n+61); //a-z  97-122   97-122
      }
      while(str.length< len){
        str += randomchar();
      }
      return str
    
  }
var str = getRandStr(10); // 0a3iJiRZap
console.log(str)
function getRandStr(len,char){
    char = char || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    var str = '';
    for (var i = 0; i < len; i++) {
      // 每次循環(huán)隨機截取一個字符
      var randomPoz = Math.floor(Math.random() * char.length);
        str += char.substring(randomPoz,randomPoz+1);
    }
    return str;
  
}
var str = getRandStr(10); // 0a3iJiRZap
console.log(str)
//檢驗隨機數(shù)出現(xiàn)的次數(shù)是否均等
function random(min,max) {
var dist = {};
for (var i=0; i<10000; i++) {
    //將出現(xiàn)的數(shù)字保存為對象的key值并記錄他們出現(xiàn)的次數(shù)
    var key = Math.floor(Math.random() * (max - min) ) + min;
    if (dist[key]) {
        dist[key]++
    }else {
        dist[key] = 1;
    }
}
console.log(dist);
}
random(2,8);

寫一個函數(shù),生成一個隨機 IP 地址,一個合法的 IP 地址為 0.0.0.0~255.255.255.255

function getRandIP() {
    var result = ''
   for(var i=0;i<4;i++){
       result += (Math.floor(Math.random() * 256) + '.');
   }
   var arr = result.split('');
   arr.pop();
   result = arr.join('');
   return result;
}
var ip = getRandIP()
console.log(ip) // 10.234.121.45
function getRandIP(){
    let arr = [];
    for (let i = 0; i < 4; i++) {
        arr.push(Math.floor(Math.random() * 266));
    }
    return arr.join('.');
}

var ip = getRandIP()
console.log(ip) // 10.234.121.45

寫一個函數(shù),生成一個隨機顏色字符串,合法的顏色為#000000~ #ffffff

function getRandColor(){
    var possible = '0123456789abcdef';
    var result = ''
    for(var i=0;i<3;i++){
        result += getRandStr(2,possible);
    }
    var arr = result.split('');
    arr.unshift('#');
    return arr.join('');
}
var color = getRandColor()
console.log(color)   // #3e2f1b

function getRandStr(len,char){
    var possible = char || "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    var str = '';
    for(var j=0;j<len;j++){
      //每次循環(huán)隨機一個字母 
      str += possible.charAt(Math.floor(Math.random() * possible.length))    
    }
    return str 
}
function getRandColor(){
    var temp;
    var arr = ['#'];
    var str='0123456789abcdef', len = str.length;
    for (var i = 0; i < 6; i++) {
        var temp = Math.floor(Math.random() * (len));
        arr.push(str[temp]);
    }
    return arr.join('');
}

var color = getRandColor()
console.log(color)   // #f5a121

數(shù)組方法里push、pop、shift、unshift、join、splice分別是什么作用?用 splice函數(shù)分別實現(xiàn)push、pop、shift、unshift方法

1. push()方法將一個或多個元素添加到數(shù)組的末尾,并返回數(shù)組的新長度。

作用:

1.添加元素到數(shù)組

var sports = ["soccer", "baseball"];
var total = sports.push("football", "swimming");

console.log(sports); 
// ["soccer", "baseball", "football", "swimming"]

console.log(total);  
// 4
  1. 合并兩個數(shù)組(apply,call)
var vegetables = ['parsnip', 'potato'];
var moreVegs = ['celery', 'beetroot'];

// 將第二個數(shù)組融合進第一個數(shù)組
// 相當于 vegetables.push('celery', 'beetroot');
Array.prototype.push.apply(vegetables, moreVegs);

console.log(vegetables); 
// ['parsnip', 'potato', 'celery', 'beetroot']

3.像數(shù)組一樣使用對象
push 是特意設計為通用的,我們可以使用它來獲得便利。正如下面的例子所示,Array.prototype.push 可以在一個對象上工作。push也可以作用在字符串上,非常方便。

var obj = {
    length: 0,

    addElem: function addElem (elem) {
        [].push.call(this, elem);
    }
};

obj.addElem({});
obj.addElem({});
console.log(obj.length);
// → 2
//盡管 obj 不是數(shù)組,但是 push 方法成功地使 obj 的 length 屬性增長了,就像我們處理一個實際的數(shù)組一樣。

2. pop()方法從數(shù)組中刪除最后一個元素,并返回該元素的值。此方法更改數(shù)組的長度。

3. shift()方法從數(shù)組中刪除第一個元素,并返回該元素的值。此方法更改數(shù)組的長度

4. unshift() 方法將一個或多個元素添加到數(shù)組的開頭,并返回新數(shù)組的長度

5. join()方法將數(shù)組的所有元素連接到一個字符串中。join() 方法,不會改變數(shù)組!

用處:可使用四種不同的分隔符連接數(shù)組元素

6. splice(deleteIndex,deleteNum,addItem)方法通過刪除現(xiàn)有元素和/或添加新元素來更改一個數(shù)組的內(nèi)容。

以上六種方法只有join不會改變原數(shù)組?。?!

splice函數(shù)分別實現(xiàn)push、pop、shift、unshift

function push(arr,ele){
  arr.splice(arr.length,0,ele);
  return arr.length;
}
function pop(arr){
  return arr.splice(arr.length-1,1);
}
function shift(arr){
  return arr.splice(0,1);
}
function unshift(arr,ele){
  arr.splice(0,0,ele)
  return arr.length
}
es6優(yōu)雅多了..

class MyArray extends Array {
    sPush(...items) {
        this.splice(this.length, 0, ...items);
    }
    sPop() {
        this.splice(this.length - 1, 1);
    }
    sShift() {
        this.splice(0, 1);
    }
    sUnshift(...items) {
        this.splice(0, 0, ...items);
    }
}
let arr = new MyArray(1, 2, 3);
arr.sUnshift(4);//[4, 1, 2, 3]

寫一個函數(shù),操作數(shù)組,數(shù)組中的每一項變?yōu)樵瓉淼钠椒?,在原?shù)組上操作

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]
function squareArr(arr){
    arr.map(function(item,index){
        arr[index] = item * item;
    })
}
var arr = [2, 4, 6]
squareArr(arr)
console.log(arr) // [4, 16, 36]

寫一個函數(shù),操作數(shù)組,返回一個新數(shù)組,新數(shù)組中只包含正數(shù),原數(shù)組不變

function filterPositive(arr){
    // 記重點:filter不會改變原數(shù)組
    var result = arr.filter(function(item){
        return parseInt(item) > 0
    })
    return result;
}
// 原數(shù)組沒變
var arr = [3, -1,  2,  '饑人谷', true]
var newArr = filterPositive(arr)
console.log(newArr) //[3, 2]
console.log(arr) //[3, -1,  2,  '饑人谷', true]
function filterPositive(arr) {
    return arr.filter((e) => {
        return typeof e === 'number' && e > 0;
    });
}
var arr = [3, -1, 2, '饑人谷', true]
var newArr = filterPositive(arr)
console.log(newArr) //[3, 2]
console.log(arr) //[3, -1,  2,  '饑人谷', true]

寫一個函數(shù)getChIntv,獲取從當前時間到指定日期的間隔時間

var str = getChIntv("2017-02-08");
console.log(str);  // 168天7小時23分鐘35秒
function getChIntv(date){
    var targetDate = new Date(date)
    var curDate = new Date;
    var offset = Math.abs(curDate - targetDate)

    var totalSeconds = Math.floor(offset/1000)//總秒數(shù)
    var seconds = totalSeconds % 60

    var totalMinutes = Math.floor(offset/1000/60)//總分鐘
    var minutes = totalMinutes % 60

    var totalHours = Math.floor(offset/1000/60/60)//總小時
    var hours = totalHours % 24

    var totalDays = Math.floor(offset/1000/60/60/24)//總天數(shù)
    
    return totalDays + '天' + hours + '小時' + minutes + '分鐘' + seconds + '秒'
}

把hh-mm-dd格式數(shù)字日期改成中文日期

var str = getChsDate('2015-01-08');
console.log(str);  // 二零一五年一月八日

function getChsDate(date){
    var result = []
    var str = ['零','一','二','三','四','五','六','七','八','九',
               '十','十一','十二','十三','十四','十五','十六','十七','十八','十九',
               '二十','二十一','二十二','二十三','二十四','二十五','二十六','二十七','二十八','二十九',
               '三十','三十一'];
    var arr = date.split('-');
    var year = arr[0];
    // 除去0并轉(zhuǎn)化為字符串
    var month = parseInt(arr[1]) + '';
    var day = parseInt(arr[2]) + '';

    

    for(var i=0;i<year.length;i++){
        result.push(str[year[i]])
    }
    result.push('年')

    for(var j=0;j<month.length;j++){
        result.push(str[month[j]])
    }
    result.push('月')

    for(var k=0;k<day.length;k++){
        result.push(str[day[k]])
    }
    result.push('日')

    return result.join('')
}

寫一個函數(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(t){
    var  diffTime = +new Date -t;

    var  second = 1000,
         minute = second * 60,
         hour = minute * 60,
         day = hour * 24,
         month = day * 30,
         year = month * 12;

    var time;
    
    if (diffTime >= year) {
        time = parseInt(diffTime / year);
        return time + "年前";
    } else if (diffTime >= month) {
        time = parseInt(diffTime / month);
        return time + "個月前";
    } else if (diffTime >= day) {
        time = parseInt(diffTime / day);
        return time + "天前";
    } else if (diffTime >= hour) {
        time = parseInt(diffTime / hour);
        return time + "小時前";
    } else if (diffTime >= minute) {
        time = parseInt(diffTime / minute);
        return time + "分鐘前";
    } else if (diffTime >= second) {
        return "剛剛";
    }
}
var str1 = friendlyDate('1501053330236');
var str2 = friendlyDate('1500059930236');
var str3 = friendlyDate('1501060042273');
console.log(str1, str2,str3);//1小時前 11天前 剛剛


參考鏈接:mdn

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容