实现一些常见的函数

写一个函数,返回从min到max之间的 随机整数,包括min不包括max

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

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

写一个函数,返回从min都max之间的 随机整数,包括min包括max

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

写一个函数,生成一个长度为 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++){
      //每次循环随机一个字符
      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   其实数字也可以向下面这样写: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++) {
      // 每次循环随机截取一个字符
      var randomPoz = Math.floor(Math.random() * char.length);
        str += char.substring(randomPoz,randomPoz+1);
    }
    return str;
  
}
var str = getRandStr(10); // 0a3iJiRZap
console.log(str)
//检验随机数出现的次数是否均等
function random(min,max) {
var dist = {};
for (var i=0; i<10000; i++) {
    //将出现的数字保存为对象的key值并记录他们出现的次数
    var key = Math.floor(Math.random() * (max - min) ) + min;
    if (dist[key]) {
        dist[key]++
    }else {
        dist[key] = 1;
    }
}
console.log(dist);
}
random(2,8);

写一个函数,生成一个随机 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

写一个函数,生成一个随机颜色字符串,合法的颜色为#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++){
      //每次循环随机一个字母 
      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

数组方法里push、pop、shift、unshift、join、splice分别是什么作用?用 splice函数分别实现push、pop、shift、unshift方法

1. push()方法将一个或多个元素添加到数组的末尾,并返回数组的新长度

作用:

1.添加元素到数组

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

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

console.log(total);  
// 4
  1. 合并两个数组(apply,call)
var vegetables = ['parsnip', 'potato'];
var moreVegs = ['celery', 'beetroot'];

// 将第二个数组融合进第一个数组
// 相当于 vegetables.push('celery', 'beetroot');
Array.prototype.push.apply(vegetables, moreVegs);

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

3.像数组一样使用对象
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 不是数组,但是 push 方法成功地使 obj 的 length 属性增长了,就像我们处理一个实际的数组一样。

2. pop()方法从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度。

3. shift()方法从数组中删除第一个元素,并返回该元素的值。此方法更改数组的长度

4. unshift() 方法将一个或多个元素添加到数组的开头,并返回新数组的长度

5. join()方法将数组的所有元素连接到一个字符串中。join() 方法,不会改变数组!

用处:可使用四种不同的分隔符连接数组元素

6. splice(deleteIndex,deleteNum,addItem)方法通过删除现有元素和/或添加新元素来更改一个数组的内容。

以上六种方法只有join不会改变原数组!!!

splice函数分别实现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优雅多了..

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]

写一个函数,操作数组,数组中的每一项变为原来的平方,在原数组上操作

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]

写一个函数,操作数组,返回一个新数组,新数组中只包含正数,原数组不变

function filterPositive(arr){
    // 记重点:filter不会改变原数组
    var result = arr.filter(function(item){
        return parseInt(item) > 0
    })
    return result;
}
// 原数组没变
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]

写一个函数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)//总秒数
    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)//总天数
    
    return totalDays + '天' + hours + '小时' + minutes + '分钟' + seconds + '秒'
}

把hh-mm-dd格式数字日期改成中文日期

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并转化为字符串
    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('')
}

写一个函数,参数为时间对象毫秒数的字符串格式,返回值为字符串。假设参数为时间对象毫秒数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(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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容