1、输入出生日期,返回距离还有多少天生日
function getDay(month,day){
var now = new Date()
var thisYear = now.getFullYear()
var birthday = new Date(thisYear,month-1,day)
if(birthday < now){
birthday.setFullYear(now.getFullYear()+1)
}
let timeDec = birthday-now
let getday = timeDec / (24*60*60*1000)
return Math.ceil(getday)
}
let day = getDay(11,6)
console.log("距离生日还有:" + day + "天");
2、格式化日期
function formatDate(timeStamp,formatDate){
function appendZero(data){
if(data < 10){
data = '0' + data
}
return data;
}
let date = new Date(timeStamp * 1000)
let obj = {
yyyy: date.getFullYear(),
MM: appendZero(date.getMonth() + 1),
dd: appendZero(date.getDate()),
HH: appendZero(date.getHours()),
mm: appendZero(date.getMinutes()),
ss: appendZero(date.getSeconds()),
w: ()=>{
const arr = ['日','一','二','三','四','五','六']
return arr[date.getDay()]
}
}
let res1 = formatDate.replace('yyyy',obj.yyyy)
let res2 = res1.replace('MM',obj.MM)
let res3 = res2.replace('dd',obj.dd)
let res4 = res3.replace('HH',obj.HH)
let res5 = res4.replace('mm',obj.mm)
let res6 = res5.replace('ss',obj.ss)
let res7 = res6.replace('w',obj.w)
return res7
}
let str = formatDate('1403058804','yyyy-MM-dd HH:mm:ss 星期w')
console.log(str)
let arr = [2,4,5,3,5]
let res = new Array(10).fill(null).map( (x,index) => index )
console.log(res);
3、给一个字符串,循环输出每一个字符,当输出到最后一个字符时再从头开始
function p(s){
let i = 0
return function an(){
if(i == s.length) i = 0
let res = s[i]
i++
return res
}
}
let str = p('bar')
console.log(str(),str(),str(),str(),str());
4、给一个数,判断该数是否是斐波那契数列里的一项,若是则返回第几项,若不是则返回-1
function judge(n){
let a = 1, b = 1, sum = 0, index = 1;
while(sum < n){
sum = a + b
a = b
b = sum
index++
}
return sum === n ? index : -1
}
let ans = judge(5)
console.log(ans);
5、实现链式的加减乘除(myCalculator(1).add(12).minus(3).multi(10).div(5).getValue() === 20)(数字马力)
function myCalculator(num){
class cla {
constructor (val){
this.val = val
}
getValue (val) {
return this.val
}
add (newVal) {
this.val = this.val + newVal
return this
}
minus (newVal) {
this.val = this.val - newVal
return this
}
multi (newVal) {
this.val = this.val * newVal
return this
}
div (newVal) {
this.val = this.val / newVal
return this
}
}
let obj = new cla(num)
return obj
}
console.log(myCalculator(121).add(1).minus(2).getValue());
console.log(myCalculator(1).add(12).minus(3).multi(10).div(5).getValue());
6、搜索多个文件夹路径(字符串数组,例如['/usr/bin', '/etc/config']),查找是否有公共路径,若有则返回公共路径(字符串),否则返回 null
function findParentDirectory(paths) {
let arr = []
paths.forEach(element => {
let a = element.split('/')
a.shift()
arr.push(a)
});
let res = []
for(let i = 0; i < arr[0].length; i++){
let isTrue = true
for(let j = 0; j < arr.length-1; j++){
if(arr[j][i] !== arr[j+1][i]) {
isTrue = false;
break;
}
}
isTrue && res.push(arr[0][i])
}
if(res.length){
return '/' + res.join('/')
} else {
return null
}
}
console.log(findParentDirectory(['/home/user/vue','/home/user/react','/home/user/angular']));
7、若a * a + b * b === c * c,则称'a,b,c'为勾股数,找出比 n 小的所有勾股数(暴力解法)
function gougu(n) {
let arr = []
for(let a = 3; a <= n; a++){
for(let b = a+1; b <= n; b++){
for(let c = b+1; c <= n; c++){
if(a*a + b*b == c*c){
arr.push(`${a},${b},${c}`)
}
}
}
}
return arr;
}
console.log(gougu(10));
8、以‘-’为分隔符,将第二个起的非空单词首字母转为大写
function change(str){
let sArr = str.split('-')
if(sArr[0] == ''){
sArr.shift()
}
for(let i = 0; i < sArr.length; i++){
sArr[i] = sArr[i].slice(0,1).toUpperCase() + sArr[i].slice(1)
}
sArr[0] = sArr[0].slice(0,1).toLowerCase() + sArr[0].slice(1)
return sArr.join('');
}
console.log(change('-webikt-border-image'));
console.log(change('font-size'));
9、检查字符串中是否包含连续相同的字母
function containsRepeatingLetter(str) {
return /([a-zA-Z])\1/g.test(str);
}
console.log(containsRepeatingLetter('rattle'))