写一个函数,返回从min到max之间的 随机整数,包括min不包括max
function minmax(min,max){
return min + Math.floor(Math.random()*(max-min))
}
minmax(2,6)//2 3 4 5
写一个函数,返回从min都max之间的 随机整数,包括min包括max
function minmax(min,max){
return min + Math.floor(Math.random()*(max-min+1))
}
minmax(2,6)//2 3 4 5 6
写一个函数,生成一个长度为 n 的随机字符串,字符串字符的取值范围包括0到9,a到 z,A到Z。
可以配置想要随机的字符
function getRandStr(len,char){
// 意识到charAt就很轻松了,用possible[]也可以
var possible = char || "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var str = '';
for(var j=0;j<len;j++){
//每次循环随机一个字符
str += possible.charAt(Math.floor(Math.random() * possible.length))
}
return str
}
function getRandStr(len){
var str =''
var randomchar=function(){
var n= Math.floor(Math.random()*62);
if(n<10) return n; //1-10 其实数字也可以向下面这样写:48-57
if(n<36) return String.fromCharCode(n+55); //A-Z 65-90
return String.fromCharCode(n+61); //a-z 97-122 97-122
}
while(str.length< len){
str += randomchar();
}
return str
}
var str = getRandStr(10); // 0a3iJiRZap
console.log(str)
function getRandStr(len,char){
char = char || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var str = '';
for (var i = 0; i < len; i++) {
// 每次循环随机截取一个字符
var randomPoz = Math.floor(Math.random() * char.length);
str += char.substring(randomPoz,randomPoz+1);
}
return str;
}
var str = getRandStr(10); // 0a3iJiRZap
console.log(str)
//检验随机数出现的次数是否均等
function random(min,max) {
var dist = {};
for (var i=0; i<10000; i++) {
//将出现的数字保存为对象的key值并记录他们出现的次数
var key = Math.floor(Math.random() * (max - min) ) + min;
if (dist[key]) {
dist[key]++
}else {
dist[key] = 1;
}
}
console.log(dist);
}
random(2,8);
写一个函数,生成一个随机 IP 地址,一个合法的 IP 地址为 0.0.0.0~255.255.255.255
function getRandIP() {
var result = ''
for(var i=0;i<4;i++){
result += (Math.floor(Math.random() * 256) + '.');
}
var arr = result.split('');
arr.pop();
result = arr.join('');
return result;
}
var ip = getRandIP()
console.log(ip) // 10.234.121.45
function getRandIP(){
let arr = [];
for (let i = 0; i < 4; i++) {
arr.push(Math.floor(Math.random() * 266));
}
return arr.join('.');
}
var ip = getRandIP()
console.log(ip) // 10.234.121.45
写一个函数,生成一个随机颜色字符串,合法的颜色为#000000~ #ffffff
function getRandColor(){
var possible = '0123456789abcdef';
var result = ''
for(var i=0;i<3;i++){
result += getRandStr(2,possible);
}
var arr = result.split('');
arr.unshift('#');
return arr.join('');
}
var color = getRandColor()
console.log(color) // #3e2f1b
function getRandStr(len,char){
var possible = char || "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var str = '';
for(var j=0;j<len;j++){
//每次循环随机一个字母
str += possible.charAt(Math.floor(Math.random() * possible.length))
}
return str
}
function getRandColor(){
var temp;
var arr = ['#'];
var str='0123456789abcdef', len = str.length;
for (var i = 0; i < 6; i++) {
var temp = Math.floor(Math.random() * (len));
arr.push(str[temp]);
}
return arr.join('');
}
var color = getRandColor()
console.log(color) // #f5a121
数组方法里push、pop、shift、unshift、join、splice分别是什么作用?用 splice函数分别实现push、pop、shift、unshift方法
1. push()方法将一个或多个元素添加到数组的末尾,并返回数组的新长度。
作用:
1.添加元素到数组
var sports = ["soccer", "baseball"];
var total = sports.push("football", "swimming");
console.log(sports);
// ["soccer", "baseball", "football", "swimming"]
console.log(total);
// 4
- 合并两个数组(apply,call)
var vegetables = ['parsnip', 'potato'];
var moreVegs = ['celery', 'beetroot'];
// 将第二个数组融合进第一个数组
// 相当于 vegetables.push('celery', 'beetroot');
Array.prototype.push.apply(vegetables, moreVegs);
console.log(vegetables);
// ['parsnip', 'potato', 'celery', 'beetroot']
3.像数组一样使用对象
push 是特意设计为通用的,我们可以使用它来获得便利。正如下面的例子所示,Array.prototype.push 可以在一个对象上工作。push也可以作用在字符串上,非常方便。
var obj = {
length: 0,
addElem: function addElem (elem) {
[].push.call(this, elem);
}
};
obj.addElem({});
obj.addElem({});
console.log(obj.length);
// → 2
//尽管 obj 不是数组,但是 push 方法成功地使 obj 的 length 属性增长了,就像我们处理一个实际的数组一样。
2. pop()方法从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度。
3. shift()方法从数组中删除第一个元素,并返回该元素的值。此方法更改数组的长度
4. unshift() 方法将一个或多个元素添加到数组的开头,并返回新数组的长度
5. join()方法将数组的所有元素连接到一个字符串中。join() 方法,不会改变数组!
用处:可使用四种不同的分隔符连接数组元素
6. splice(deleteIndex,deleteNum,addItem)方法通过删除现有元素和/或添加新元素来更改一个数组的内容。
以上六种方法只有join不会改变原数组!!!
splice函数分别实现push、pop、shift、unshift
function push(arr,ele){
arr.splice(arr.length,0,ele);
return arr.length;
}
function pop(arr){
return arr.splice(arr.length-1,1);
}
function shift(arr){
return arr.splice(0,1);
}
function unshift(arr,ele){
arr.splice(0,0,ele)
return arr.length
}
es6优雅多了..
class MyArray extends Array {
sPush(...items) {
this.splice(this.length, 0, ...items);
}
sPop() {
this.splice(this.length - 1, 1);
}
sShift() {
this.splice(0, 1);
}
sUnshift(...items) {
this.splice(0, 0, ...items);
}
}
let arr = new MyArray(1, 2, 3);
arr.sUnshift(4);//[4, 1, 2, 3]
写一个函数,操作数组,数组中的每一项变为原来的平方,在原数组上操作
function squareArr(arr){
for(var 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 squareArr(arr){
arr.map(function(item,index){
arr[index] = item * item;
})
}
var arr = [2, 4, 6]
squareArr(arr)
console.log(arr) // [4, 16, 36]
写一个函数,操作数组,返回一个新数组,新数组中只包含正数,原数组不变
function filterPositive(arr){
// 记重点:filter不会改变原数组
var result = arr.filter(function(item){
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]
function filterPositive(arr) {
return arr.filter((e) => {
return typeof e === 'number' && e > 0;
});
}
var arr = [3, -1, 2, '饥人谷', true]
var newArr = filterPositive(arr)
console.log(newArr) //[3, 2]
console.log(arr) //[3, -1, 2, '饥人谷', true]
写一个函数getChIntv,获取从当前时间到指定日期的间隔时间
var str = getChIntv("2017-02-08");
console.log(str); // 168天7小时23分钟35秒
function getChIntv(date){
var targetDate = new Date(date)
var curDate = new Date;
var offset = Math.abs(curDate - targetDate)
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(offset/1000/60/60)//总小时
var hours = totalHours % 24
var totalDays = Math.floor(offset/1000/60/60/24)//总天数
return totalDays + '天' + hours + '小时' + minutes + '分钟' + seconds + '秒'
}
把hh-mm-dd格式数字日期改成中文日期
var str = getChsDate('2015-01-08');
console.log(str); // 二零一五年一月八日
function getChsDate(date){
var result = []
var str = ['零','一','二','三','四','五','六','七','八','九',
'十','十一','十二','十三','十四','十五','十六','十七','十八','十九',
'二十','二十一','二十二','二十三','二十四','二十五','二十六','二十七','二十八','二十九',
'三十','三十一'];
var arr = date.split('-');
var year = arr[0];
// 除去0并转化为字符串
var month = parseInt(arr[1]) + '';
var day = parseInt(arr[2]) + '';
for(var i=0;i<year.length;i++){
result.push(str[year[i]])
}
result.push('年')
for(var j=0;j<month.length;j++){
result.push(str[month[j]])
}
result.push('月')
for(var k=0;k<day.length;k++){
result.push(str[day[k]])
}
result.push('日')
return result.join('')
}
写一个函数,参数为时间对象毫秒数的字符串格式,返回值为字符串。假设参数为时间对象毫秒数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(t){
var diffTime = +new Date -t;
var second = 1000,
minute = second * 60,
hour = minute * 60,
day = hour * 24,
month = day * 30,
year = month * 12;
var time;
if (diffTime >= year) {
time = parseInt(diffTime / year);
return time + "年前";
} else if (diffTime >= month) {
time = parseInt(diffTime / month);
return time + "个月前";
} else if (diffTime >= day) {
time = parseInt(diffTime / day);
return time + "天前";
} else if (diffTime >= hour) {
time = parseInt(diffTime / hour);
return time + "小时前";
} else if (diffTime >= minute) {
time = parseInt(diffTime / minute);
return time + "分钟前";
} else if (diffTime >= second) {
return "刚刚";
}
}
var str1 = friendlyDate('1501053330236');
var str2 = friendlyDate('1500059930236');
var str3 = friendlyDate('1501060042273');
console.log(str1, str2,str3);//1小时前 11天前 刚刚
参考链接:mdn