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

来源:互联网 发布:加工中心图纸编程实例 编辑:程序博客网 时间:2024/06/01 22:54

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);//6search(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"));
原创粉丝点击