前端算法2

(1)日期格式化

按所给的时间格式输出指定的时间
格式说明
对于 2014.09.05 13:14:20
yyyy: 年份,2014
yy: 年份,14
MM: 月份,补满两位,09
M: 月份, 9
dd: 日期,补满两位,05
d: 日期, 5
HH: 24制小时,补满两位,13
H: 24制小时,13
hh: 12制小时,补满两位,01
h: 12制小时,1
mm: 分钟,补满两位,14
m: 分钟,14
ss: 秒,补满两位,20
s: 秒,20
w: 星期,为 [‘日’, ‘一’, ‘二’, ‘三’, ‘四’, ‘五’, ‘六’] 中的某一个;

formatDate(time, type){
    let week = '';
    switch(time.getDay()){
        case(date.getDay() == 0) week = "星期日"
        case(date.getDay() == 1) week = "星期一"
        case(date.getDay() == 2) week = "星期二"
        case(date.getDay() == 3) week = "星期三"
        case(date.getDay() == 4) week = "星期四"
        case(date.getDay() == 5) week = "星期五"
        case(date.getDay() == 6) week = "星期六"         
    }
  return time.getFullyear() + '-'+ (time.getMonth()+1)+ "-"+time.getDate()+" " + time.getHours()<10? `0${time.getHours()}`:time.getHours + 
      time.getMinuts()<10? `0${time.getMinuts()}`:time.getMinuts + time.getSeconds()<10? `0${time.getSeconds()}`:time.getSeconds() + " " + week
}

formatDate(new Date(1409894060000),'yyyy-MM-dd HH:mm:ss 星期w');

(2)斐波那契数列

用 JavaScript 实现斐波那契数列函数,返回第n个斐波那契数。 f(1) = 1, f(2) = 1 等

function fibonacci(n) {
    if(n<3){
        return 1;
    } 
    else{
      return fibonacci(n-1)+ fibonacci(n-2) 
    } 
}

fibonacci(6)

(3)为 Array 对象添加一个去除重复项的方法

前端算法2_第1张图片

Array.prototype.uniq = function () {
   var resArr = [];
   var flag = true;
     
   for(var i=0;i<this.length;i++){
       if(resArr.indexOf(this[i]) == -1){
           if(this[i] != this[i] && typeof(this[i])==='number'){   //排除 NaN
              if(flag){
                   resArr.push(this[i]);
                   flag = false;
              }
           }else{
                resArr.push(this[i]);
           }
       }
   }
    return resArr;
}

let arry = [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN];
arry.uniq();

(3)统计字符串中每个字符的出现频率
前端算法2_第2张图片

function count(str){
    let res={};
    for(let i=0;i<str.length;i++){
        if(str.charAt(i) in res){
            res[str.charAt(i)]++
        }else{
            res[str.charAt(i)]=1;
        }
    }
    
    return res;
}

console.log(count('hello world'))

(4)查找两个节点的最近的一个共同父节点,可以包括节点自身
前端算法2_第3张图片

function commonParentNode(oNode1, oNode2) {
    for(;oNode1;oNode1=oNode1.parentNode){
        if(oNode1.contains(oNode2)){
            return oNode1;
        }
    }
}

(5)封装函数 f,使 f 的 this 指向指定的对象(修改this指向)

function bindThis(f, oTarget) {
    return f.bind(oTarget);
}

你可能感兴趣的:(前端算法)