js实现类型判断,二分查找与日期格式化

1.类型判断

函数myType用于根据输入参数返回相应的    类型信息。
语法如下:
    var str = myType (param);
使用范例如下:
    myType (1); 返回值: “number”
    myType (false); 返回值: “boolean”
    myType ({}); 返回值: “object”
    myType ([]); 返回值:” Array”
    myType (function(){}); 返回值:”function”
    myType (new Date()); 返回值: “Date”
请写出函数myType的实现代码。

function myType(param){
    return (param===null||param===undefined)?param:param.constructor&&param.constructor.toString().match(/function\s*([^(]*)/)[1];
}

附加一道判断标准类型和内置对象类型的方法

function type(obj) { 
var type = Object.prototype.toString.call(obj).slice(8, -1).toLowerCase(); //标准类型和内置对象类型判断
return type;
}

2.二分查找

函数search用于在一个已排序的数字数组中查找指定数字。
语法如下:
    var index = search(arr, dst);
使用范例如下:
    var arr = [1, 2, 4, 6, 7, 9, 19,20, 30, 40, 45, 47];
    search(arr, 45); 返回值: 10
请写出函数search的实现代码 请给出函数,要求不能使用Array的原型方法,且算法时间复杂度低于O(n)。

function search(arr,dst,low,high){
       var high=high || arr.length-1;
      var low=low || 0;
       var mid=Math.floor((low+high)/2);
        if(low<=high){
            if(dst===arr[mid]){
                return mid;
            }else if(dst<arr[mid]){
                return search(arr,dst,low,mid-1);
            }else if(dst>arr[mid]){
                return search(arr,dst,mid+1,high);
            }
        }
        return -1;
}
search(arr,19);//6
search(arr, 45);//10

3.日期格式化

函数formatDate用于将日期对象转换成指定格式的字符串,语法如下:
    var str = formatDate(date, pattern);
其中pattern的全格式为”yyyy-MM-dd HH:mm:ss”
使用范例如下:
    var date = new Date(2001, 8, 11, 8, 26, 8);
    formatDate(date, “yyyy”); 返回值: “2001”
    formatDate(date, “yyyy-MM-dd”); 返回值: “2001-09-11”
    formatDate(date, “yyyy-MM-dd HH”); 返回值: “2001-09-11 08”
    formatDate(date, “yyyy-MM-dd HH:mm:ss”); 返回值:”2001-09-11 08:26:08”
请写出函数formatDate的实现代码。

方法一实现代码:
var date = new Date(2001, 8, 11, 8, 26, 8);

function formatDate(date,pattern) {
  var d = {
    year:date.getFullYear(),
    month:date.getMonth() < 10 ? '0'+date.getMonth() :date.getMonth() ,
    day:date.getDate() < 10 ? '0'+date.getDate() : date.getDate(),
    hours:date.getHours() < 10 ? '0'+date.getHours() : date.getHours(),
    minutes:date.getMinutes() < 10 ? '0'+date.getMinutes():date.getMinutes(),
    seconds:date.getSeconds() < 10 ? '0'+date.getSeconds():date.getSeconds()
  },str;

  switch(pattern) {
    case "yyyy":
      str = d.year;
      break;
    case "yyyy-MM-dd":
      str = d.year+'-'+d.month+'-'+d.day;
      break;
    case "yyyy-MM-dd HH":
      str = d.year+'-'+d.month+'-'+d.day+' '+d.hours;
      break;
    case "yyyy-MM-dd HH:mm:ss":
      str = d.year+'-'+d.month+'-'+d.day+' '+d.hours+':'+d.minutes+':'+d.seconds;
      break;
    default:
      break;
  }

  return str;
}

formatDate(date, "yyyy");     
formatDate(date, "yyyy-MM-dd");        
formatDate(date, "yyyy-MM-dd HH");       
formatDate(date, "yyyy-MM-dd HH:mm:ss");
方法二的实现代码:
function formatDate (date,pattern) {
    pattern=pattern.replace(/yyyy/,date.getFullYear());
    pattern=pattern.replace(/MM/,(date.getMonth()>10?date.getMonth():('0'+date.getMonth())));
    pattern=pattern.replace(/dd/,(date.getDate()>10?date.getDate():('0'+date.getDate())));
    pattern=pattern.replace(/HH/,(date.getHours()>10?date.getHours():('0'+date.getHours())));
    pattern=pattern.replace(/mm/,(date.getMinutes()>10?date.getMinutes():('0'+date.getMinutes())));
    pattern=pattern.replace(/ss/,(date.getSeconds()>10?date.getSeconds():('0'+date.getSeconds())));
    return pattern;
}
var date = new Date(2001,8,11,8,26,8);
console.log(formatDate(date,"yyyy-MM-dd HH:mm:ss"));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值