Math
写一个函数,返回从min到max之间的 随机整数,包括min不包括max
function getRandomInt(min, max){
return Math.floor(Math.random() * (max - min) + min)
}
写一个函数,返回从min都max之间的 随机整数,包括min包括max
function getRandomInt(min, max){
return Math.floor(Math.random() * (max - min + 1) + min)
}
写一个函数,生成一个长度为 n 的随机字符串,字符串字符的取值范围包括0到9,a到 z,A到Z。
function random(a, b){
return Math.floor(Math.random() * (b - a) + a)
}
function getRandStr(len){
var dict = "0123456789abdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var string = "";
for (var i = 0; i < len; i++) {
string = str + dict[random(0, 62)];
}
return string;
}
var str = getRandStr(10);
写一个函数,生成一个随机 IP 地址,一个合法的 IP 地址为 0.0.0.0~255.255.255.255
function random(a, b){
return Math.floor(Math.random() * (b - a) + a)
}
function getRandIP(){
var arr = [];
for (var i = 0; i < 4; i++) {
arr.push(random(0, 256));
}
return arr.join(".");
}
var ip = getRandIP();
console.log(ip);
写一个函数,生成一个随机颜色字符串,合法的颜色为#000000~ #ffffff
function random(a, b){
return Math.floor(Math.random() * (b - a) + a)
}
function getRandColor(){
var dict = "0123456789abcdef";
var str = "";
for (var i = 0; i < 6; i++) {
str = str + dict[random(0, 16)]
}
return str;
}
var color = getRandColor();
console.log(color);
数组
数组方法里push、pop、shift、unshift、join、splice分别是什么作用?用 splice函数分别实现push、pop、shift、unshift方法
- push: 在数组的尾部添加一个或多个元素,并返回数组新的长度;
- pop: 删除数组的最后一个元素,减小数组的长度并返回删除的值;
以上两个方法都是修改并替换原始数组而并非生成一个修改版的新数组。
var a = [];
a.push(1,2,3,4); //a[1,2,3,4] 返回: 4
a.pop(); //a[1,2,3] 返回: 4
a.push(5,6); // a[1,2,3,5,6] 返回: 5
a.pop(); // a[1,2,3,5] 返回: 6
- shift: 删除数组的第一个元素并将其返回,然后把所有随后的元素下移一个位置来填补数组头部的空缺;
unshift: 在数组的头部添加一个或多个元素,并将已存在的元素移动到更高索引的位置来获得足够的空间,最后返回数组的长度;
var a = [];
a.unshift(1); // a[1] 返回: 1
a.unshift(22); // a[22,1] 返回: 2
a.shift() // a[1] 返回: 22
- join: 将数组中所有元素都转化为字符串并拼接在一起,返回最后生成的字符串。可以指定一个可选的字符串在生成的字符串中分隔数组中的各个元素,如果不知道分隔符,默认使用逗号。
var a = [1,2,3,4,5];
a.join(); // “1,2,3,4,5”
a.join(" "); // "1 2 3 4 5"
a.join("-") // "1-2-3-4-5"
- splice: 是在数组中插入或删除元素的通用方法,会修改调用的数组。在插入或删除点之后的数组元素会根据需要增加或减小它们的索引值,因此数组的其他部分是仍然保持连续的。splice 的第一个元素指定了插入和(或)删除的起始位置。第二个参数指定了应该从数组中删除的元素的个数。如果省略第二个参数,从起始点开始到数组结尾的所有元素都将被删除。splice 返回一个由删除元素组成的数组,或者如果没有删除元素就返回一个空数组。
var a = [1,2,3,4,5,6,7,8];
a.splice(5); // a[1,2,3,4,5] 返回: [6,7,8]
a.splice(2,2); // a[1,2,5] 返回: [3,4]
a.splice(1,1); // a[1,5] 返回: [2]
- splice 前两个参数素指定了需要删除的数组元素,紧随其后的任意个数的参数指定了需要插入到数组中的元素,从第一个参数指定位置开始插入。splice 会插入数组本身而非数组的元素。
var a = [1,2,3,4,5];
a.splice(2,0,1,2,); // a[1,2,1,2,3,4,5] 返回: []
a.splice(2,2,"a","b") // a[1,2,"a","b",3,4,5] 返回: [1,2]
- splice 实现 push :
function push(arr, value){
arr = splice(arr.length,0,value);
return arr.length;
}
- splice 实现 pop :
function pop(arr){
return arr.splice(arr.length-1)[0];
}
- splice 实现 shift:
function shift(arr){
return arr.splice(0,1)[0];
}
- splice 实现 unshift:
function unshift(arr, value){
arr.splice(0,0,value);
return arr.length;
}
写一个函数,操作数组,数组中的每一项变为原来的平方,在原数组上操作
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){
return arr.filter(function(e){
if(typeof e == 'number'){
return e > 0
}
})
}
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(time){
var timeNum = Date.parse(time) - Date.now(); // 获取时间差
var allSeconds = Math.floor(timeNum/1000); // 获取时间差的总秒数
var getSeconds = allSeconds % 60;
var getMinutes = Math.floor(allSeconds/60) % 60;
var getHours = Math.floor(allSeconds/60/60) % 60;
var getDays = Math.floor (allSeconds/60/60/24) % 30;
var getMonths = Math.floor(allSeconds/60/60/24/30);
console.log("距离除夕还有 " + getMonths + " 月 " + getDays + " 天 "+ getHours + " 小时 "+ getMinutes + " 分 " + getSeconds + " 秒");
}
var str = getChIntv("2018-2-15-24:00:00");
console.log(str); // 距除夕还有 1 月 23 天 12 小时 20 分 10 秒
把hh-mm-dd格式数字日期改成中文日期
function getChsDate(timeStr){
var dict = ['零','一','二','三','四','五','六','七','八','九','十','十一','十二','十三','十四','十五','十六','十七','十八','十九','二十','二十一','二十二','二十三','二十四','二十五','二十六','二十七','二十八','二十九','三十','三十一']
var timeArr = timeStr.split('-'); // 拆分输入的时间,
var year = timeArr[0]; // 获取输入的年份
var month = timeArr[1];
var day = timeArr[2];
var chYear = dict[parseInt(year[0])] + dict[parseInt(year[1])] + dict[parseInt(year[2])] + dict[parseInt(year[3])]; // 转换为中文日期
var chMonth = dict[parseInt(month)];
var chDay = dict[parseInt(day)];
console.log(chYear + "年"+ chMonth + "月"+ chDay + "日");
}
var str = getChsDate('2015-01-08');
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 nowTime = Date.now(); // 获取当前时间
var offSet = Math.floor(Math.abs(nowTime - time) / 1000); // 获取时间差秒数
if(offSet < 60 ) {
console.log("刚刚");
}else if(Math.floor(offSet/60) < 60) {
console.log((Math.floor(offSet/60)) + "分钟前");
}else if(Math.floor(offSet/60/60) < 24) {
console.log((Math.floor(offSet/60/60)) + "小时前");
}else if(Math.floor(offSet/60/60/24) < 30) {
console.log((Math.floor(offSet/60/60/24)) + "天前")
}else{
console.log((Math.floor(offSet/60/60/24/30)) + "月前")
}
}
var str = friendlyDate('1514135728540') // 10分钟前
var str2 = friendlyDate('1514123728540') //3小时前