Web 前端开发

JS字符串&Math&Data

2018-07-29  本文已影响7人  小7丁

一、对于字符串

var str = 'hello jirengu.com'
写出以下操作的代码范例

  1. 获取 str 下标为3的字符
  2. 获取 str 下标为4的字符的 Ascii 码
  3. 截取字符g到末尾的字符串
  4. 从字符o开始,截取长为4个字符的字符串
  5. 获取第一个 l的下标
var str = 'hello jirengu.com'
console.log(str.charAt(3))
console.log(str.charCodeAt(4))
console.log(str.substring(str.search('g'),str.length))
console.log(str.substr(str.search('o'),4))
var s1 = str.search('l')
console.log(s1)

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

function random(min,max) {
    return Math.random()*(max - min)+min   
}

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

function getRandIP(){
    function random(a,b){
        return Math.floor(Math.random()*(b - a + 1))+a
    }
    var arr = []
    for(var i=0;i<4;i++) {
        arr.push(random(0,255))
    }
    return arr.join('.')
}
var ip = getRandIP()
console.log(ip) // 10.234.121.453

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

 function getRandColor(){
    function random(a,b){
        return Math.floor(Math.random()*(b - a + 1))+a
    }
    var arr = ''
    var dict = '0123456789abcdef'
    for(var i=0;i<6;i++) {
        arr += dict[random(0,15)]
    }
    return '#' + arr
}
var color = getRandColor()
console.log(color)   // #3e2f1b

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

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

六、写一个函数,参数为时间对象毫秒数的字符串格式,返回值为字符串。假设参数为时间对象毫秒数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 dtime = Date.now() - parseInt(time)
    var minute = 60*1000
    var hour = minute*60
    var day = hour*24
    var month = day*30
    var year = month*12

    if (dtime < minute) {

        return '刚刚'
    }else 
    if (dtime < hour) {

        return `${Math.floor(dtime/minute)}分钟前`
    }else
    if (dtime < day) {

        return `${Math.floor(dtime/hour)}小时前`
    }else
    if(dtime < month) {

        return `${Math.floor(dtime/day)}天前`
    }else
    if(dtime < year) {

        return `${Math.floor(dtime/month)}月前`
    }else
    if(dtime >= year) {

        return `${Math.floor(dtime/year)}年前`
    }
}
var date1 = Date.now()
console.log(friendlyDate(date1))

var date2 = new Date (2018,1,27,14,46)
console.log(friendlyDate(date2.getTime()));

var date3 = new Date (2018,1,27,11,54);
console.log(friendlyDate(date3.getTime()));

var date4 = new Date (2018,1,26,14,55);
console.log(friendlyDate(date4.getTime()));

var date5 = new Date (2018,0,28,14,57);
console.log(friendlyDate(date5.getTime()));

var date6 = new Date (2017,2,4,14,58);
console.log(friendlyDate(date6.getTime()));

七、实现一个reduce函数,作用和原生的reduce类似下面的例子。

function reduce(arr,fn,initvalue){
    var arr2 = (initvalue === undefined ? [] :[initvalue]).concat(arr)
    while(arr2.length>1) {
        arr2.splice(0,2,fn(arr2[0],arr2[1]))
    }
    return arr2[0]
}
var sum = reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0)
console.log(sum)

八、实现一个flatten函数,将一个嵌套多层的数组 array(数组) (嵌套可以是任何层数)转换为只有一层的数组,数组中元素仅基本类型的元素或数组,不存在循环引用的情况。

var arr =[1, [2], [3, [[4]]]]

var arr2 = flat(arr)

function flat(arr) {
    var arr2 = []
    arr.forEach(function(val){
        if(Array.isArray(val)){
            arr2 = arr2.concat(flat(val))
        }else{
        arr2.push(val)
        }
    })
    return arr2
}
console.log(arr2)
上一篇 下一篇

猜你喜欢

热点阅读