美文网首页
Math数组Data

Math数组Data

作者: 青鸣 | 来源:发表于2017-03-25 00:04 被阅读0次

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

    function calc(min, max) {
               var dir = {};
               for (var i = 0; i < 1000; i++) {
                   var zhi = Math.floor(Math.random() * (max - min)) + min//这行输出整数
                   if (dir[zhi] === undefined) {         //这以下是判断这个整数是否是随机的
                       dir[zhi] = 1
                   } else {
                       ++dir[zhi]
                   }
               }       //这会得到dir对象
               var arr = [];
               for (var key in dir) {
                   dir[key] = dir[key] / 1000;
                   arr.push(dir[key])                 //得到每个整数出现的概率
               }
               var maxc = Math.max.apply(null, arr);   //提取数组中的最大值
               var minc = Math.min.apply(null, arr);
               if (maxc - minc < (1/(max-min))){     
    /*判断是否为随机,例如从5个整数中,随机选出一个,概率是0.2;
    最大概率值不得超过0.2,即认为是随机的。这里概率是相对calc(5, 10),这个5-10之间的。*/
                   console.log('这是一个随机的整数')
               } else {
                   console.log('这不是一个随机的整数')
               }
               return zhi;
           }
           var dir = calc(5, 10)
           console.log(dir)
    

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

    同题1、只需要var zhi = Math.floor(Math.random() * (max - min)) + min
    变成var zhi = Math.floor(Math.random() * (max - min+1)) + min
    即可。
    

    3、写一个函数,生成一个长度为 n 的随机字符串,字符串字符的取值范围包括0到9,a到 z,A到Z。

    var str ='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    
    function getRandStr(len){
       var str1 = "";
       for(var i = 0; i<len;i++){
       var str2=Math.floor(Math.random()*62)
       str1 += str[str2]
    }
    return str1;
    }
    console.log(getRandStr(10))
    

    4、写一个函数,生成一个随机 IP 地址,一个合法的 IP 地址为 0.0.0.0~255.255.255.255

    function getRandIP(){
    
    ​
     return IP = Math.floor(Math.random()*256)
     +'.'+Math.floor(Math.random()*256)
     +'.'+Math.floor(Math.random()*256)
     +'.'+Math.floor(Math.random()*256)
    }
    getRandIP();
    console.log(getRandIP())
    

    5、写一个函数,生成一个随机颜色字符串,合法的颜色为#000000~ #ffffff

    var str ='0123456789abcdef'
    
    function getRandColor(){
       var col = "";
       for(var i = 0 ; i<6 ; i++){
           var str2 = Math.floor(Math.random()*16)
           col += str[str2]
       }
       return '#'+col
    }
    var color = getRandColor()
    console.log(color)
    

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

    push :在数组的末端添加一个或多个元素,并返回一个添加新元素的数组长度,注意数组的长度会发生改变,该方法会改变原数组。
    pop:用于删除数组最后一个元素,无参数,并返回该元素,改变原数组。
    shift:用于删除数组的第一个元素,无参数,并返回该元素,改变原数组。
    unshift:用于在数组第一个位置添加一个或多个元素,并返回改数组的长度,改变原数组。
    join:以参数作为分割符,将所有数组成员或类数组对象组成一个字符串并返回。如果没有参数,则默认以逗号分割。如果数组成员是undefined或null或是空位,则会被转为空字符串。如果separator是空字符串(""),则所有元素之间都没有任何字符。不改变数组。

    var a = ['Wind', 'Rain', 'Fire'];
    
    var myVar1 = a.join();     // myVar1的值变为"Wind,Rain,Fire"
    var myVar2 = a.join(', '); // myVar2的值变为"Wind, Rain, Fire"
    var myVar3 = a.join(' + '); // myVar3的值变为"Wind + Rain + Fire"
    var myVar4 = a.join('');   // myVar4的值变为"WindRainFire"
    

    split:将String对象分割成数组,通过将字符串分成子串。
    str.split([separator],[limit])

    当找到一个 seperator时,separator会从字符串中被移除,返回存进一个数组当中的子字符串。如果忽略 separator 参数,则返回的数组包含一个元素,该元素是原字符串。如果 separator 是一个空字符串,则 str将被转换为由字符串中字符组成的一个数组。
    splice:splice方法用于删除原数组的一部分成员,并可以在被删除的位置添加入新的数组成员,返回值是被删除的元素。注意,该方法会改变原数组。
    splice的第一个参数是删除的起始位置,第二个参数是被删除的元素个数。如果后面还有更多的参数,则表示这些就是要被插入数组的新元素。

    var arr = [1,2,3];
    
    arr.push(6); //4
    console.log(arr)//[1,2,3,6]
    var a = [1,2,3];
    a.splice(3,0,6) //[]
    a //[1,2,3,6]
    ​
    var arr = [1,2,3];
    arr.pop(); //3
    console.log(arr)//[1,2]
    var a = [1,2,3];
    a.splice(2,1) //[3]
    a //[1,2]
    ​
    var arr = [1,2,3];
    arr.shift(); //1
    console.log(arr)//[2,3]
    var a= [1,2,3];
    a.splice(0,1) //[1]
    a //[2,3]
    ​
    var arr = [1,2,3];
    arr.unshift(6); //4
    console.log(arr)//[6,1,2,3]
    var a= [1,2,3];
    a.splice(0,0,6) //[]
    a //[6,1,2,3]
    

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

    function squareArr(arr){
    
       var newArr = [];
       for(var i = 0; i < arr.length ; i++){
           var arr1= arr[i]*arr[i];
           newArr.push(arr1);
    ​
       }
       return newArr;
    }
    var arr = [2, 4, 6]
    squareArr(arr)
    console.log(squareArr(arr))
    

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

    function filterPositive(arr){
    
       newArr = arr;
       var arr1 = [] 
       for(var i = 0 ; i<newArr.length;i++){
           if(newArr[i]>0 && newArr[i]!=true){
               arr1.push(newArr[i])
           }
       }
       return arr1
    }
    var arr = [3, -1, 2, '饥人谷', true]
    var newArr = filterPositive(arr)
    console.log(arr) //[3, -1, 2, '饥人谷', true]
    console.log(newArr) //[3,2]
    

    Date
    Note: 需要注意的是只能通过调用 Date 构造函数来实例化日期对象:以常规函数调用它(即不加 new 操作符)将会返回一个字符串,而不是一个日期对象。另外,不像其他JavaScript 类型,Date 对象没有字面量格式。

    Date();返回的是一个字符串,无论有没有参数,直接调用Date
    总是返回当前时间。
    new Date();返回的是一个对象。Date
    还可以当作构造函数使用。对它使用new
    命令,会返回一个Date
    对象的实例。如果不加参数,生成的就是代表当前时间的对象。
    Date
    对象接受从1970年1月1日00:00:00 UTC开始计算的毫秒数作为参数。
    Date对象还接受一个日期字符串作为参数,返回所对应的时间。
    Date.now()返回自 1970-1-1 00:00:00 UTC (时间标准时间)至今所经过的毫秒数。
    Date.parse()方法用来解析日期字符串,返回距离1970年1月1日 00:00:00
    的毫秒数
    Date.getDay():返回星期,星期日为0,星期一为1,以此类推
    Date.getDate():返回实例对象对应每个月的几号(从1开始)
    toUTCString方法返回对应的UTC时间,也就是比北京时间晚8个小时。
    toISOString方法返回对应时间的ISO8601写法。
    var today = new Date(1362790014000);
    today.toLocaleDateString(); // "2015/4/3"
    在多个参数的情况下,Date对象将其分别视作对应的年、月、日、小时、分钟、秒和毫秒。如果采用这种用法,最少需要指定两个参数(年和月),其他参数都是可选的,默认等于0。如果只使用年一个参数,Date对象会将其解释为毫秒数。
    这些参数如果超出了正常范围,会被自动折算。比如,如果月设为15,就算折算为下一年的4月。参数还可以使用负数,表示扣去的时间。月是从0开始计算,周是从0-6计算。

    new Date('2017-05-5')
    Fri May 05 2017 00:00:00 GMT+0800 (中国标准时间)
    new Date('2017-5-5')
    Fri May 05 2017 00:00:00 GMT+0800 (中国标准时间)
    new Date('2017,5,5')
    Fri May 05 2017 00:00:00 GMT+0800 (中国标准时间)
    
    new Date(2017,5,5)Mon Jun 05 2017 00:00:00 GMT+0800 (中国标准时间)new Date(2017-5-5)Thu Jan 01 1970 08:00:02 GMT+0800 (中国标准时间)
    

    类型转换时,Date对象的实例如果转为数值,则等于对应的毫秒数;如果转为字符串,则等于对应的日期字符串。所以,两个日期对象进行减法运算,返回的就是它们间隔的毫秒数;进行加法运算,返回的就是连接后的两个字符串。
    1、 写一个函数getChIntv
    ,获取从当前时间到指定日期的间隔时间

    var str = getChIntv("2017-06-01");
    
    function getChIntv(date){   
       var a = Date.parse(date)
       var b = Date.now()
       var c = parseInt((a - b)/(1000*60*60*24)) //天
       var d = (a -b)/(1000*60*60*24)-c   
       var e = parseInt(d*24) //小时
       var f = d*24-e 
       var g = parseInt(f*60) //多少分钟
       var h = f*60-g
       var i = parseInt(h*60)
       return '距离六月一号还有' + c +'天'+ e + '小时' + g + '分钟' + i + '秒'
    }
    console.log(str);
    

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

    var str = getChsDate('2015-01-08');
    
    console.log(str); // 二零一五年一月八日
    
    var str = getChsDate('2015-01-08');
    
    function getChsDate(data){
       var dict = ["零","一","二","三","四","五","六","七","八","九","十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","二十一","二十二","二十三","二十四","二十五","二十六","二十七","二十八","二十九","三十","三十一"];
       var str0 = data.split('-');
       var str1 = str0[0]
       var str2 = str0[1]
       var str3 = str0[2]
       var str4 = dict[str1[0]]+dict[str1[1]]+dict[str1[2]]+dict[str1[3]]
       var str5 = dict[parseInt(str2)]
       var str6 = dict[parseInt(str3)]
       return str4 + '年' + str5 + '月' +str6 + '日';
    }
    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 date = Date.parse(Date())
           if (date - time < 0) {
               return '未来'
           } else {
               if (date - time < 60000) {
                   return '刚刚'
               } else {
                   if (date - time < 1000 * 60 * 60) {
                       return parseInt((date - time) / (1000 * 60)) + '分钟前'
                   } else {
                       if (date - time < 1000 * 60 * 60 * 24) {
                           return parseInt((date - time) / (1000 * 60 * 60)) + '小时前'
                       } else {
                           if (date - time < 1000 * 60 * 60 * 24 * 30) {
                               return parseInt((date - time) / (1000 * 60 * 60 * 24)) + '天前'
                           } else {
                               if (date - time < 1000 * 60 * 60 * 24 * 30 * 12) {
                                   return parseInt((date - time) / (1000 * 60 * 60 * 24 * 30)) + '个月前'
                               } else {
                                   if (date - time >= 1000 * 60 * 60 * 24 * 30 * 12) {
                                       return parseInt((date - time) / (1000 * 60 * 60 * 24 * 30 * 12)) + '年前'
                                   }
                               }
                           }
                       }
                   }
               }
           }
       }
       var str0 = friendlyDate('1494286699422')
       var str1 = friendlyDate('1483941245793')
       var str2 = friendlyDate('1473941245793')
       var str3 = friendlyDate('1463941245793')
       var str4 = friendlyDate('1353941245793')
       var str5 = friendlyDate('1243941245793')
       var str6 = friendlyDate('1033941245793')
       console.log(str0)
       console.log(str1)
       console.log(str2)
       console.log(str3)
       console.log(str4)
       console.log(str5)
       console.log(str6)
    

    可以换成switch,case语句更简单

    相关文章

      网友评论

          本文标题:Math数组Data

          本文链接:https://www.haomeiwen.com/subject/entqottx.html