js常用方法

任意数求和

function sum(){
var total = 0;
for(var i=0;i<arguments.length;i++){
var cur = Number(arguments[i])
if(!isNaN(cur)){
total += cur;
}
}
console.log(total);
}

9*9乘法表

var str = '';
str+='<ul>';
    i  行
    for(var i=1;i<=9;i++){
    str+='<li>';
        span  i
        j  列
        for(var j=1;j<=i;j++){
        str+='<span>';
                    i=3  j=2
                        str+= j+' * '+i+' = '+i*j;
                            2*3=6
                    str+='</span>';
        }
        str+='</li>';
    }
    str+='</ul>';

数组去重

var obj = {};
for(var i=0;i<ary.length;i++){
var cur  = ary[i];
if(obj[cur]==cur){
ary[i] = ary[ary.length-1];
i--;
continue;
}
obj[cur] = cur;
}

sort思想

Array.prototype.rmsame=function(){
var ary=this.sort(function(a,b){return a-b});
for(var i=0; i<ary.length; i++){
if(ary[i]===ary[i+1]){
ary.splice(i,1);
i--;
}
}
return ary;
};

双循环思想

Array.prototype.rmsame=function(){
//this->实例;
for(var i=0; i<this.length; i++){
var oLi=this[i];
for(var j=i+1; j<this.length; j++){
if(oLi===this[j]){//说明重复了
this.splice(j,1);
j--;
}
}
}
return this;
};

快速排序

var ary = [1,2,6,5,3,8,7];
function quickSort(ary){
if(ary.length<=1){
return ary;
}
var cenVal = ary.splice(0,1)[0];
var left = [];
var right = [];
for(var i=0;i<ary.length;i++){
var cur = ary[i];
if(cur<cenVal){
left.push(cur)
}else{

right.push(cur);
}
}
return quickSort(left).concat([cenVal],quickSort(right))
}
console.log(quickSort(ary));

插入排序

var array = [4,3,2,5,6,7,1]
function insertSort(ary){
var left = [];
left.push(ary[0]);
for(var i=1;i<ary.length;i++){
var cur = ary[i];
for(var j=left.length-1;j>=0;j--){
if(cur<left[j]){
if(j==0){
left.unshift(cur);
}
continue;
}else{
left.splice(j+1,0,cur);
break;//循环结束,就不再比较
}
}
}
return left;
}
var a = insertSort(array);
console.log(a);

冒泡排序

for(var i=0;i<ary.length-1;i++){
for(var j=0;j<ary.length-1-i;j++){
if(ary[j]>ary[j+1]){
ary[j] = ary[j]+ary[j+1];
ary[j+1] = ary[j]-ary[j+1];
ary[j] = ary[j]-ary[j+1];
}
}
}
console.log(ary);

判断是否为公有属性方法的封装

function  hasPubProperty(attr,obj){
return attr in obj && !obj.hasOwnProperty(attr);
}

forEach的封装

Array.prototype.myForEach=function(callback,context){
//this ->实例;ary ary1
context=context||window;
if('forEach' in Array.prototype){//标准浏览器的处理;
this.forEach(callback,context);
return;
}
for(var i=0; i<this.length; i++){//1)callback被调用的次数;
callback.call(context,this[i],i,this);//2)callback传参;3)this指向;
}
}

map的封装

Array.prototype.myMap=function(callback,context){
context=context||window;
//浏览器判断-性能优化
if('map' in Array.prototype){
return  this.map(callback,context);
}
var ary=[];
for(var i=0; i<this.length; i++){
var res=callback.call(context,this[i],i,this);
ary.push(res);
}
return ary;
}

类数组转数组

function makeArray(arg){
var ary=[];
try{
return Array.prototype.slice.call(arg);
}catch (e){
for(var i=0; i<arg.length; i++){
ary.push(arg[i]);
}
return ary;
}
}

求平均数

function average(){
var ary=Array.prototype.slice.call(arguments);
ary.sort(function(a,b){return a-b});
ary.pop();
ary.shift();
return (eval(ary.join('+'))/ary.length).toFixed(2)
}
alert(average(1.777,9.237,6.777,8.477,3.733))

三种排序
思路1:sort排序

var ary=[20,3,12,6,34,5]
ary.sort(function(a,b){return a-b});
var max=ary.pop(),min=ary.shift();
console.log(max,min)

思路2:假设法-假设法假设的数字

var max=ary[0];
var min=ary[0];
for(var i=0; i<ary.length; i++){
if(ary[i]>max) max=ary[i];
if(ary[i]<min) min=ary[i];
}

思路3:Math.max配合eval

var str1=ary.toString();
alert(eval('Math.max('+str1+')'))
alert(eval('Math.min('+str1+')'))

思路4

alert(Math.max.apply(undefined,ary))

倒计时

countDown();
setInterval(countDown,1000);
function toDou(n){
return n>=0 && n<10?'0'+n:''+n;
}
function countDown(){
var oDate=new Date();
var s=Math.floor((new Date('2016/11/3 18:00:00')-oDate)/1000);
//秒转换用%的思想:24*60*60=86400;
var d=Math.floor(s/86400);//整数部分求的是天数
s%=86400;//剩下的秒数;
var h=Math.floor(s/3600);//整数部分是小时;
s%=3600;
var m=Math.floor(s/60);//整数部分是分;
s%=60;//剩下的秒数;
var str=toDou(d)+'天 '+toDou(h)+':'+toDou(m)+':'+toDou(s);
oSpan.innerHTML=str;
}

获取随机验证码
思路1:for循环

var strCode='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
var str='';
for(var i=0; i<4; i++){
var rnd=Math.round(Math.random()*61);
//如果字符串中没有,放字符串中拼接,如果字符串中有了;预防塌陷
if(str.indexOf(strCode.charAt(rnd)) == -1){
str+=strCode.charAt(rnd);
}else{
i--;
}
}

思路2:while循环

while(str.length<4){
var rnd=Math.round(Math.random()*61);
if(str.indexOf(strCode.charAt(rnd)) == -1){
str+=strCode.charAt(rnd);
}
}

求最大值和最小值
思路1:sort排序

var ary=[18,2,6,23,9];
ary.sort(function(a,b){return a-b});
var max=ary.pop();
var min=ary.shift();

思路2:假设法

var max=ary[0];
var min=ary[0];
for(var i=0; i<ary.length; i++){
var cur=ary[i];
if(cur>max) max=cur;
if(cur<min) min=cur;
}
alert(max);
alert(min);

思路3:Math.max 配合 eval;

var max=eval('Math.max('+ary.toString()+')');
var min=eval('Math.min('+ary.toString()+')');*/

思路4:apply

var max=Math.max.apply(null,ary);
alert(max);

求平均值

function average(){
//1.类数组转数组
var ary=Array.prototype.slice.call(arguments);
//2.sort排序
ary.sort(function(a,b){return a-b});
//3.掐头去尾
ary.pop(); ary.shift();
//4.求平均值
return (eval(ary.join('+'))/ary.length).toFixed(2)
}
alert(average(9.777,3.777,2.777,14.757,58.773))

求出现次数最多的单词

var str='aaaccccbbbdddCCCCCAAAAABbbbAAAAcccDDdDD';
//1.把字符串进行排序
str=str.split('').sort(function(a,b){return a.localeCompare(b)}).join('');
//2.重复子项 和  arguments(字符串replace方法);
var max=0;
var maxStr='';
str.replace(/(\w)\1+/gi,function($0,$1){
//$0:计算出单词出现的次数; $1:找出出现次数对应的单词;
if($0.length>max) {
max=$0.length;
maxStr=$1;
}else if($0.length===max){
maxStr+=$1;
}
});

思路2:用重复子项;

str=str.split('').sort(function(a,b){return a.localeCompare(b)}).join('');
var max=0;
var maxStr='';
str.replace(/(\w)\1+/gi,function($0,$1){
if($0.length>max){
max=$0.length;
maxStr=$1;
}else if($0.length==max){
maxStr+=','+$1;
}
});*/
/*//利用对象不重名的特性;求出现次数最多的单词,以及出现多少次?
var obj={};
for(var i=0; i<str.length; i++){
var cur=str[i].toLowerCase();
if(obj[cur]){
obj[cur]++;
}else{
obj[cur]=1;
}
}

2.用假设法求出出现最多的次数;

var max=obj.d;
for(var attr in obj){
if(obj[attr]>max) max=obj[attr];
}

3.根据次数求出出现次数最多的单词,出现次数最多的单词可能有多个;

var ary=[];
for(var attr in obj){
if(obj[attr]==max){
ary.push(attr);
}
}
console.log('出现次数最多的单词'+ary+';出现'+max+'次');*/

日期格式化封装
转数组思路1.把字符串中的数字,成组的拎出来,放到数组中去;

var strCode = '2016-6-23 00:41:30';
var tmp = '{0}年{1}月{2}日';
/*var reg=/^(\d{4})[\-](\d{1,2})[\-](\d{1,2})\s+(\d{1,2})[\:](\d{1,2})[\:](\d{1,2})$/;
var ary=[];
strCode.replace(reg,function(){
ary=Array.prototype.slice.call(arguments,1,arguments.length-2);
});

转数组思路2:

 var ary=strCode.match(/\d+/g);
 var ary=strCode.split(/\D+/g);
//需求:strCode.formatDate(tmp);->"2016年11月6日 11时5分30秒";
String.prototype.formatDate = function (tmp) {
//this->实例;
//1.把实例字符串中的数组存到数组中;
var ary=this.match(/\d+/g);
//2.拿数组中的内容,替换模板
var tmpStr=tmp||'{0}年{1}月{2}日 {3}时{4}分{5}秒';
tmpStr=tmpStr.replace(/{(\d)}/g,function($0,$1){
var n=ary[$1];
n=n>=0 && n<10? '0'+Number(n):n;
return n;
});
return tmpStr;
}
console.log(strCode.formatDate(tmp));

获取地址栏中的参数

var str='www.baidu.com?name=zhfueng&age=8&sex=undefined';
//{name:zhfueng,age:8};
/*var reg=/([^?=&]+)=([^?=&]+)/g;
var obj={};
str.replace(reg,function($0,$1,$2){
obj[$1]=$2;
});
console.log(obj);*/
//需求:str.queryURLParameter(); ->键值对的对象;{name:zhfueng,age:8}
String.prototype.queryURLParameter=function(){
//this->实例字符串
var reg=/([^?=&]+)=([^?=&]+)/g;
var obj={};
this.replace(reg,function($0,$1,$2){
obj[$1]=$2;
})
return obj;
}
console.log(str.queryURLParameter());

exec封装match

var str='zhufeng2016zhanwang2017huigu2015';
var reg=/\d+/g;
String.prototype.myMatch=function(reg){
//this-实例str
var res=reg.exec(this);
var ary=[];
while(res){
ary.push(res[0]);
res=reg.exec(this);
}
return ary;
};
alert(str.myMatch(reg));//[2016,2017,2015]

domReady

function domReady(fn){
if(document.addEventListener){
document.addEventListener('DOMContentLoaded',fn);
}else{
//监听页面的变化
document.onreadystatechange=function(){
//当页面加载完成的时候,开始执行函数;
if(document.readyState==='complete'){
fn();
}
}
}```
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容