Math 任务
1.写一个函数,返回从min到max之间的 随机整数,包括min不包括max
function getRandom(a,b){
var num = a + Math.floor(Math.random()*(b-a))
return num
}
console.log(getRandom(3,9))
- 写一个函数,返回从min都max之间的 随机整数,包括min包括max
function getRandom(a,b){
var num = a + Math.floor(Math.random()*(b+1-a))
return num
}
- 写一个函数,生成一个长度为 n 的随机字符串,字符串字符的取值范围包括0到9,a到 z,A到Z。
function getRandStr(len){
var str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
var result = ''
for( var i = 0; i < len; i++){
var key = Math.floor(Math.random()*62)
result += str[key]
}
return result;
}
console.log(getRandStr(7));
- 写一个函数,生成一个随机 IP 地址,一个合法的 IP 地址为 0.0.0.0~255.255.255.255
function getRandIP(){
var arr = []
for(var i = 0; i < 4; i++){
arr.push(Math.floor(Math.random()*256))
}
var str = arr.join(".")
return str
}
var ip = getRandIP()
console.log(ip)
- 写一个函数,生成一个随机颜色字符串,合法的颜色为#000000~ #ffffff
function getRandColor(){
var dict = '0123456789abcdef'
var str = ''
for(i = 0; i < 6; i++){
var key =Math.floor(Math.random()*16)
str += dict[key]
}
return result = '#' + str;
}
var color = getRandColor()
console.log(color)
数组任务
- 数组方法里push、pop、shift、unshift、join、splice分别是什么作用?用 splice函数分别实现push、pop、shift、unshift方法
- push() 方法用于在数组的末端添加一个或多个元素,并返回添加新元素后的数组长度。注意,该方法会改变原数组。
1.添加元素到数组
var a = [1,5,9]
var b = a.push(7,6);
console.log(a); //[1, 5, 9, 7, 6]
console.log(b); // 5
2.合并数组
var a = [1,5,9]
var b = [2,4.6]
var c = a.push.apply(a,b)
var d = Array.prototype.push.apply(a,b)
console.log(a) // [1,5,9,2,4,6]
- push方法还可以用于向对象添加元素,添加后的对象变成类似数组的对象,即新加入元素的键对应数组的索引,并且对象有一个length属性。
var a = {a: 1};
[].push.call(a, 2);
a // {a:1, 0:2, length: 1}
[].push.call(a, [3]);
a // {a:1, 0:2, 1:[3], length: 2}
- pop() 方法用于删除数组的最后一个元素,并返回该元素。注意,该方法会改变原数组。
var c = [1,5,6]
var d= c.pop()
console.log(c) // [1,5]
console.log(d) // 6
//对空数组使用pop方法,不会报错,而是返回undefined。
[].pop() // undefined
push和pop结合使用,就构成了“后进先出”的栈结构(stack)。
- shift()方法用于删除数组的第一个元素,并返回该元素。注意,该方法会改变原数组。
var a = ['a', 'b', 'c'];
a.shift() // 'a'
a // ['b', 'c']
-
unshift()方法用于在数组的第一个位置添加元素,并返回添加新元素后的数组长度。注意,该方法会改变原数组。
-
join()方法以参数作为分隔符,将所有数组成员组成一个字符串返回,原数组不变。如果不提供参数,默认用逗号分隔。
通过call方法,这个方法也可以用于字符串。
Array.prototype.join.call('hello', '-')
// "h-e-l-l-o"
- splice()方法用于删除原数组的一部分成员,并可以在被删除的位置添加入新的数组成员,返回值是被删除的元素。注意,该方法会改变原数组。
splice()的第一个参数是删除的起始位置,第二个参数是被删除的元素个数。如果后面还有更多的参数,则表示这些就是要被插入数组的新元素。
var a = ['a', 'b', 'c', 'd', 'e', 'f'];
a.splice(4, 2) // ["e", "f"]
a // ["a", "b", "c", "d"] 从原数组4号位置,删除了两个数组成员。
var a = ['a', 'b', 'c', 'd', 'e', 'f'];
a.splice(4, 2, 1, 2) // ["e", "f"]
a // ["a", "b", "c", "d", 1, 2] 删除成员,还插入了两个新成员
// 如果只是单纯地插入元素,splice方法的第二个参数可以设为0。
var a = [1, 1, 1];
a.splice(1, 0, 2) // []
a // [1, 2, 1, 1]
// 如果只提供第一个参数,等同于将原数组在指定位置拆分成两个数组。
var a = [1, 2, 3, 4];
a.splice(2) // [3, 4]
a // [1, 2]
- 用splice函数实现push、pop、shift、unshift方法
- 实现push()方法
function getPush(arr ,ele){
arr.splice(arr.length, 0, ele)
return arr.length
}
- 实现pop()方法
function getPop(arr){
result = arr.splice(arr.length - 1,1)
return result[0]
}
arr = [4,6,8,10]
console.log(getPop(arr)); //10
- 实现shift()方法
function getShift(arr){
result = arr.splice(0,1)
return result[0]
}
console.log(getShift(arr)); //4
- 实现unshift()方法
function getUnshift(arr, ele){
arr.splice(0, 0, ele)
return arr.length;
}
arr = [4,6,8,10]
console.log(getUnshift(arr,7))// 5
- 写一个函数,操作数组,数组中的每一项变为原来的平方,在原数组上操作
function squareArr(arr){
for( 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 filterPositive(arr){
var newArr = []
for(i = 0; i < arr.length; i++){
if(typeof(arr[i]) == 'number' && arr[i] > 0){
newArr.push(arr[i])
}
}
return newArr
}
var arr = [3, -1, 2, '饥人谷', true]
var newArr = filterPositive(arr)
console.log(newArr) //[3, 2]
console.log(arr) //[3, -1, 2, '饥人谷', true]
Date 任务
- 写一个函数getChIntv,获取从当前时间到指定日期的间隔时间
function getChIntv(dateStr){
var targetDate = new Date(dateStr);
var curDate = new Date();
var offset = Math.abs(targetDate - curDate);
var totalSeconds = Math.floor(offset / 1000);
var second = totalSeconds % 60
var totalMinutes = Math.floor(totalSeconds / 60)
var minutes = totalMinutes % 60
var totalHours = Math.floor(totalMinutes / 60)
var hours = totalHours % 24
var totalDays = Math.floor(totalHours / 24)
return totalDays + '天' + hours + '小时' + minutes + '分钟' + second+'秒'
}
var str = getChIntv("2017-02-08");
console.log(str); // 距除夕还有 20 天 15 小时 20 分 10 秒
- 把hh-mm-dd格式数字日期改成中文日期
function getChsDate(dateStr){
var dict = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九',"十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "二十一", "二十二", "二十三", "二十四", "二十五", "二十六", "二十七", "二十八", "二十九", "三十", "三十一"]
dateArr = dateStr.split('-')
var year = dateArr[0]
var month = dateArr[1]
var date = dateArr[2]
var newYears = dict[parseInt(year[0])]+dict[parseInt(year[1])]+dict[parseInt(year[2])]+dict[parseInt(year[3])]+'年';
var newMonths = dict[parseInt(month)]+'月';
var newDays = dict[parseInt(date)]+'日';
return newYears + newMonths + newDays;
}
var str = getChsDate('2015-01-08');
console.log(str); // 二零一五年一月八日
- 写一个函数,参数为时间对象毫秒数的字符串格式,返回值为字符串。假设参数为时间对象毫秒数t,根据t的时间分别返回如下字符串:
function friendlyDate(time){
var offTime = Date.now() - time;
var str = '';
if( offTime /1000 < 60 ){
str = '刚刚'
}else if( 60 <= offTime / 1000 < (60 * 60)){
str = '3分钟前';
}else if((60 * 60) <= offTime / 1000 < (24 * 60 * 60)){
str = '8小时前'
}else if((24 * 60 * 60) <= offTime / 1000 < (3 * 24 * 60 * 60)){
str = '3天前'
}else if((3 * 24 * 60 * 60) <= offTime / 1000 < (12 * 30 * 24 * 60 * 60)){
str = '2个月前'
}else {
str = '8年前'
}
return str;
}
console.log(friendlyDate( '1511776208158' )) // 1分钟前
网友评论