Math
寫一個(gè)函數(shù)悍缠,返回從min到max之間的 隨機(jī)整數(shù),包括min不包括max
function number(min, max) {
var num = Math.floor(Math.random() * (max - min) + min);
console.log(num);
}
number(1, 10);
寫一個(gè)函數(shù),返回從min都max之間的 隨機(jī)整數(shù),包括min包括max
function number(min, max) {
var num = Math.floor(Math.random() * (max - min + 1) + min);
console.log(num);
}
number(1, 10);
寫一個(gè)函數(shù)弟跑,生成一個(gè)長度為 n 的隨機(jī)字符串,字符串字符的取值范圍包括0到9趴拧,a到 z,A到Z劲藐。
function getRandStr(len) {
var strs = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var possibleStr = '';
for (var i = 0; i < len; i++) {
//charAt()方法從一個(gè)字符串中返回指定的字符,接收一個(gè)參數(shù)index八堡,一個(gè)介于0和字符串長度減1之間的整數(shù)
possibleStr += strs.charAt(Math.floor(Math.random() * strs.length));
}
return possibleStr;
}
var str = getRandStr(10);
console.log(str); //如:Irtg95rXBQ
寫一個(gè)函數(shù)樟凄,生成一個(gè)隨機(jī) IP 地址聘芜,一個(gè)合法的 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
寫一個(gè)函數(shù),生成一個(gè)隨機(jī)顏色字符串缝龄,合法的顏色為#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
數(shù)組方法里push汰现、pop、shift叔壤、unshift瞎饲、join、splice分別是什么作用炼绘?用 splice函數(shù)分別實(shí)現(xiàn)push嗅战、pop、shift、unshift方法驮捍。
- push()用于在數(shù)組末尾添加若干項(xiàng)并返回修改后數(shù)組的長度疟呐,pop()用于刪除數(shù)組最后一項(xiàng)并返回該項(xiàng),shift()用于刪除數(shù)組第一項(xiàng)并返回該項(xiàng)东且,unshift()用于在數(shù)組前端添加若干項(xiàng)并返回新數(shù)組長度启具,這幾種方法都會(huì)改變原始數(shù)組。
- join()根據(jù)傳入的字符串參數(shù)將數(shù)組項(xiàng)拼接成字符串并返回包含所有數(shù)組項(xiàng)的字符串珊泳。
- splice()用于向數(shù)組中插入項(xiàng)鲁冯,該方法始終都會(huì)返回一個(gè)數(shù)組,該數(shù)組中包含從原始數(shù)組中刪除的項(xiàng)(如果沒有刪除任何項(xiàng)則返回一個(gè)空數(shù)組)色查,此方法會(huì)改變原始數(shù)組薯演。
//用splice實(shí)現(xiàn)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實(shí)現(xiàn)pop
var popArr = colors.splice(colors.length - 1, 1);
console.log(popArr); //[ 'pink' ]
console.log(colors); //[ 'red', 'green', 'blue', 'yellow' ]
//用splice實(shí)現(xiàn)shift
var shiftArr = colors.splice(0, 1);
console.log(shiftArr); //[ 'red' ]
console.log(colors); //[ 'green', 'blue', 'yellow' ]
//用splice實(shí)現(xiàn)unshift
var unshiftArr = colors.splice(0, 0, 'orange', 'white', 'black');
console.log(unshiftArr); //[]
console.log(colors); //[ 'orange', 'white', 'black', 'green', 'blue', 'yellow' ]
寫一個(gè)函數(shù),操作數(shù)組综慎,數(shù)組中的每一項(xiàng)變?yōu)樵瓉淼钠椒交练拢谠瓟?shù)組上操作
//方法一
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]
寫一個(gè)函數(shù),操作數(shù)組示惊,返回一個(gè)新數(shù)組好港,新數(shù)組中只包含正數(shù),原數(shù)組不變
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]
寫一個(gè)函數(shù)sperate(str,num)米罚,str是要分割的字符串钧汹,num是以多少個(gè)字符為單位分割
如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 ', ' ' ]
單個(gè)數(shù)組去重
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]
兩個(gè)數(shù)組去重并排序
function distinctBySortArray(arr1, arr2) {
//copy arr1生成一個(gè)無重復(fù)項(xiàng)的新數(shù)組result
var result = Array.from(new Set(arr1.concat()))
//遍歷arr2中的每一項(xiàng)
for (var i = 0; i < arr2.length; i++) {
//新數(shù)組result中沒有與arr2[i]重復(fù)的項(xiàng)則將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]
有兩個(gè)從小到大已經(jīng)排序完成的數(shù)組,長度分別是n和m录择,單個(gè)數(shù)組的不存在重復(fù)元素拔莱,問如何在m+n次操作下,完成去重隘竭,得到一個(gè)完整的非重?cái)?shù)組塘秦。
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
寫一個(gè)函數(shù)getChIntv,獲取從當(dāng)前時(shí)間到指定日期的間隔時(shí)間
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 + '時(shí) ' + minutes + '分 ' + seconds + '秒'
}
var str = getChIntv("2017-09-02");
console.log(str); // 距dot生日還有 11天 11時(shí) 11分 49秒
把hh-mm-dd格式數(shù)字日期改成中文日期
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); // 一九九三年九月十二日
寫一個(gè)函數(shù)动看,參數(shù)為時(shí)間對象毫秒數(shù)的字符串格式尊剔,返回值為字符串。假設(shè)參數(shù)為時(shí)間對象毫秒數(shù)t菱皆,根據(jù)t的時(shí)間分別返回如下字符串:
- 剛剛(距當(dāng)前時(shí)間不到1分鐘時(shí)間間隔)
- N分鐘前 (距當(dāng)前時(shí)間大于等于1分鐘须误,小于1小時(shí))
- N小時(shí)前 (距離當(dāng)前時(shí)間大于等于1小時(shí),小于24小時(shí))
- N天前 (距離當(dāng)前時(shí)間大于等于24小時(shí)仇轻,小于30天)
- N個(gè)月前 (距離當(dāng)前時(shí)間大于等于30天小于12個(gè)月)
- N年前 (t 距離當(dāng)前時(shí)間大于等于12個(gè)月)
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 + '個(gè)月前';
}
else if (offset >= days) {
t = parseInt(offset / days);
return t + '天前';
}
else if (offset >= hours) {
t = parseInt(offset / hours);
return t + '小時(shí)前';
}
else if (offset >= minutes) {
t = parseInt(offset / minutes);
return t + '分鐘前';
}
else if (offset >= seconds) {
return '剛剛';
}
}
var str = friendlyDate('1311111119999'); // 6年前(括號里的字符串值為1970年距字符串值表示的時(shí)間的毫秒數(shù))
var str2 = friendlyDate('1503190042273'); //1天前
console.log(str, str2);
參考資料