让前端飞饥人谷技术博客

Math_Array_Date相关

2017-08-21  本文已影响0人  _Dot912

Math

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

function number(min, max) {
    var num = Math.floor(Math.random() * (max - min) + min);
    console.log(num);
}
number(1, 10);

写一个函数,返回从min都max之间的 随机整数,包括min包括max

function number(min, max) {
    var num = Math.floor(Math.random() * (max - min + 1) + min);
    console.log(num);
}
number(1, 10);

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

function getRandStr(len) {
    var strs = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    var possibleStr = '';
    for (var i = 0; i < len; i++) {
        //charAt()方法从一个字符串中返回指定的字符,接收一个参数index,一个介于0和字符串长度减1之间的整数
        possibleStr += strs.charAt(Math.floor(Math.random() * strs.length));
    } 
        return possibleStr;
}
var str = getRandStr(10);
console.log(str); //如:Irtg95rXBQ

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

function getRandIP() {
    var ipArr = [];
    for (var i = 0; i < 4; i++) {
        ipArr[i] = Math.floor(Math.random() * 256);
    }
    return ipArr.join('.');
}
var ip = getRandIP()
console.log(ip) // 10.234.121.45

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

//方法一
function getRandColor() {
    var str = '0123456789abcdef';
    var possibleColor = '';
    for (var i = 0; i < 6; i++) {
        possibleColor += str.charAt(Math.floor(Math.random() * str.length));
    } 
        return '#' + possibleColor;
}
var color = getRandColor();
console.log(color);   // #3e2f1b

//方法二
function number(min, max) {
    var num = Math.floor(Math.random() * (max - min) + min);
    return num;
}
function getRandColor() {
    var possibleColor = '';
    for (var i = 0; i < 6; i++) {
        possibleColor += number(0, 16).toString(16);
    }
    return '#' + possibleColor;
}
var color = getRandColor();
console.log(color);   // #3e2f1b

Array

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

//用splice实现push
var colors = ['red', 'green', 'blue'];
var pushArr = colors.splice(colors.length, 0, 'yellow', 'pink');
console.log(pushArr); //[]
console.log(colors); //[ 'red', 'green', 'blue', 'yellow', 'pink' ]

//用splice实现pop
var popArr = colors.splice(colors.length - 1, 1);
console.log(popArr); //[ 'pink' ]
console.log(colors); //[ 'red', 'green', 'blue', 'yellow' ]

//用splice实现shift
var shiftArr = colors.splice(0, 1);
console.log(shiftArr); //[ 'red' ]
console.log(colors); //[ 'green', 'blue', 'yellow' ]

//用splice实现unshift
var unshiftArr = colors.splice(0, 0, 'orange', 'white', 'black');
console.log(unshiftArr); //[]
console.log(colors); //[ 'orange', 'white', 'black', 'green', 'blue', 'yellow' ]

写一个函数,操作数组,数组中的每一项变为原来的平方,在原数组上操作

//方法一
function squareArr(arr) {
    for (var i = 0; i < arr.length; i++) {
        arr[i] *= arr[i];
    }
};
var arr = [2, 4, 6];
squareArr(arr);
console.log(arr); // [4, 16, 36]

//方法二
function squareArr(arr) {
    for (var i = 0; i < arr.length; i++) {
        arr[i]=Math.pow(arr[i], 2);
    }
};
var arr = [2, 4, 6];
squareArr(arr);
console.log(arr); // [4, 16, 36]

写一个函数,操作数组,返回一个新数组,新数组中只包含正数,原数组不变

function filterPositive(arr) {
    var result = arr.filter(function (item, index) {
        return parseInt(item) > 0;
    })
    return result;
}
var arr = [3, -1, 2, '饥人谷', true]
var newArr = filterPositive(arr)
console.log(newArr) //[3, 2]
console.log(arr) //[3, -1,  2,  '饥人谷', true]

写一个函数sperate(str,num),str是要分割的字符串,num是以多少个字符为单位分割

如sperate('abcdefg',3)==>[abc,def,g]

function sperate(str, num) {
    var res = []
    for (var i = 0; i < str.length; i++) {
        res.push(str.slice(i, i + num))
        i += num - 1
    }
    return res
}
console.log(sperate('abcdefg', 3))//[ 'abc', 'def', 'g' ]
console.log(sperate('hello world  ', 3))//[ 'hel', 'lo ', 'wor', 'ld ', ' ' ]

单个数组去重

var arr = [4, 5, 6, 6, 7, 7, 8, 9]
//ES6 Set方法
console.log(Array.from(new Set(arr)))//[4, 5, 6, 7, 8, 9]
var arr = [4, 5, 6, 6, 7, 7, 8, 9]
var arr2=arr.filter((item,index,arr)=>{
return arr.indexOf(item)===index
console.log(arr2)//[4, 5, 6, 7, 8, 9]

两个数组去重并排序

function distinctBySortArray(arr1, arr2) {
    //copy arr1生成一个无重复项的新数组result
    var result = Array.from(new Set(arr1.concat()))
    //遍历arr2中的每一项
    for (var i = 0; i < arr2.length; i++) {
        //新数组result中没有与arr2[i]重复的项则将arr2[i]添加到result末尾
        if (result.indexOf(arr2[i]) === -1) {
            result.push(arr2[i])
        }
    }
    return result.sort(compare)
}

function compare(val1, val2) {
    return val1 - val2
}

var arr1 = [1, 2, 39, 9, 8, 3, 6, 9]
var arr2 = [1, 7, 8, 0, 0]

console.log(distinctBySortArray(arr1, arr2))//[ 0, 1, 2, 3, 6, 7, 8, 9, 39 ]
console.log(arr1)//[1, 2, 39, 9, 8, 3, 6, 9]
console.log(arr2)//[1, 7, 8, 0, 0]

有两个从小到大已经排序完成的数组,长度分别是n和m,单个数组的不存在重复元素,问如何在m+n次操作下,完成去重,得到一个完整的非重数组。

function distinctBySortArray(arr1, arr2) {
    var n = arr1.length
    var m = arr2.length
    var result = []
    for (var i = 0, j = 0; i < n && j < m;) {
        var temp1 = arr1[i]
        var temp2 = arr2[j]
        if (temp1 < temp2) {
            i++
            result.push(temp1)
        } else if (temp1 === temp2) {
            j++
        } else if (temp1 > temp2) {
            j++
            result.push(temp2)
        }
    }
    if (i < n) {
        return result.concat(arr1.slice(i, n))
    }
    if (j < m) {
        return result.concat(arr2.slice(j, m))
    }
    return result
}

var arr1 = [1, 2, 3, 6, 9]
var arr2 = [1, 6, 7, 8, 9, 13]

console.log(distinctBySortArray(arr1, arr2))//[ 1, 2, 3, 6, 7, 8, 9, 13 ]
console.log(arr1)//[1, 2, 3, 6, 9]
console.log(arr2)//[1, 6, 7, 8, 9, 13]

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 seconds = totalSeconds % 60;
    var totalMinutes = Math.floor((offset / 1000) / 60);
    var minutes = totalMinutes % 60;
    var totalHours = Math.floor(totalMinutes / 60);
    var hours = totalHours % 24;
    var totalDays = Math.floor(totalHours / 24);
    var days = totalDays % 365;
    return '距dot生日还有 ' + days + '天 ' + hours + '时 ' + minutes + '分 ' + seconds + '秒'
}
var str = getChIntv("2017-09-02");
console.log(str);  // 距dot生日还有 11天 11时 11分 49秒

把hh-mm-dd格式数字日期改成中文日期

function getChsDate(date) {
    var result = [];
    var strs = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二', '十三', '十四', '十五', '十六', '十七', '十八', '十九', '二十', '二十一', '二十二', '二十三', '二十四', '二十五', '二十六', '二十七', '二十八', '二十九', '三十', '三十一'];
    var arr = date.split('-');
    var year = arr[0],
        month = arr[1],
        day = arr[2];
    year = year.split('').map(function (value) {
        return strs[+value];
    }).join('');
    month = strs[+month];
    day = strs[+day];
    return year + '年' + month + '月' + day + '日';
}
var str = getChsDate('1993-09-12');
console.log(str);  // 一九九三年九月十二日

写一个函数,参数为时间对象毫秒数的字符串格式,返回值为字符串。假设参数为时间对象毫秒数t,根据t的时间分别返回如下字符串:

function friendlyDate(time) {
    var offset = +new Date - time;
    var seconds = 1000,
        minutes = seconds * 60,
        hours = minutes * 60,
        days = hours * 24,
        months = days * 30,
        years = months * 12;
    var t;

    if (offset >= years) {
        t = parseInt(offset / years);
        return t + '年前';
    }
    else if (offset >= months) {
        t = parseInt(offset / months)
        return t + '个月前';
    }
    else if (offset >= days) {
        t = parseInt(offset / days);
        return t + '天前';
    }
    else if (offset >= hours) {
        t = parseInt(offset / hours);
        return t + '小时前';
    }
    else if (offset >= minutes) {
        t = parseInt(offset / minutes);
        return t + '分钟前';
    }
    else if (offset >= seconds) {
        return '刚刚';
    }
}
var str = friendlyDate('1311111119999'); //  6年前(括号里的字符串值为1970年距字符串值表示的时间的毫秒数)
var str2 = friendlyDate('1503190042273'); //1天前
console.log(str, str2);

参考资料

上一篇下一篇

猜你喜欢

热点阅读