Math数组Data
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语句更简单