进阶任务六

2017-11-27  本文已影响0人  饥人谷_迪

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))
  1. 写一个函数,返回从min都max之间的 随机整数,包括min包括max
function getRandom(a,b){
        var num = a + Math.floor(Math.random()*(b+1-a))
        return num
    }
  1. 写一个函数,生成一个长度为 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));
  1. 写一个函数,生成一个随机 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) 
  1. 写一个函数,生成一个随机颜色字符串,合法的颜色为#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)

数组任务

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

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]
  1. 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}
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)。

var a = ['a', 'b', 'c'];

a.shift() // 'a'
a // ['b', 'c']

通过call方法,这个方法也可以用于字符串。

Array.prototype.join.call('hello', '-')
// "h-e-l-l-o"

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]
  1. 实现push()方法
function getPush(arr ,ele){
    arr.splice(arr.length, 0, ele)
    return arr.length
}

  1. 实现pop()方法
function getPop(arr){
        result = arr.splice(arr.length - 1,1)
        return result[0]
    }

    arr = [4,6,8,10]
    console.log(getPop(arr)); //10
  1. 实现shift()方法
function getShift(arr){
        result = arr.splice(0,1)
        return result[0]
    }
    console.log(getShift(arr)); //4
  1. 实现unshift()方法
function getUnshift(arr, ele){
        arr.splice(0, 0, ele)
        return arr.length;
    }
    arr = [4,6,8,10]
    console.log(getUnshift(arr,7))// 5
  1. 写一个函数,操作数组,数组中的每一项变为原来的平方,在原数组上操作
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]
  1. 写一个函数,操作数组,返回一个新数组,新数组中只包含正数,原数组不变
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 任务

  1. 写一个函数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 秒
  1. 把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);  // 二零一五年一月八日

  1. 写一个函数,参数为时间对象毫秒数的字符串格式,返回值为字符串。假设参数为时间对象毫秒数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分钟前
上一篇下一篇

猜你喜欢

热点阅读