Math数组Data

2017-03-25  本文已影响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语句更简单

上一篇下一篇

猜你喜欢

热点阅读