JavaScript之API重构

检索indexOf

方式一:添加函数

1
2
3
4
5
6
7
8
9
function indexof(arr,val,fromi){
fromi==undefined&&(fromi=0);
for(;fromi<arr.length;fromi++){
if(arr[fromi]==val){
return fromi;
}
}
return -1;
}

方式二:Array的原型上添加方法

1
2
3
4
5
6
7
8
9
10
if(Array.prototype.indexOf===undefined){
Array.prototype.indexOf=function(val,fromi){
fromi===undefined&&(fromi=0);
for(;fromi<this.length;fromi++){
if(this[fromi]==val){
return fromi}
}
return -1;
}
}

字符串排重

方法一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function unique1(arr){
for(var i=0,new_arr=[];i<2;i++){
for(var j=0;j<new_arr.length;j++){
if(new_arr[j]==arr[i]){
break;
}
}
if(j==new_arr.length){
new_arr[j]=arr[i]
}
//console.log(new_arr[j])
}
return new_arr
}

方法二

1
2
3
4
5
6
7
8
9
10
11
12
function unique2(arr){
for(var i=0,hash=[];i<arr.length;i++){
if(hash[arr[i]]==undefined){hash[arr[i]]=1;console.log(hash);}
}

var i=0,keys=[];
for(keys[i++] in hash);//省略分号则表示循环一次,关联数组循环特殊性
/*for(var k in hash){
keys[i++]=k
}*/
return keys
}

去除空格trim

方式一:添加函数

1
2
3
4
5
6
7
8
9
10
11
12
//去除左空格
function ltrim(str){
return str.replace(/^\s+/,"")
}
//去除右空格
function rtrim(str){
return str.replace(/\s+$/,"")
}
//去除左右两边的空格
function trim(str){
return str.replace(/^\s+|\s+$/,"")
}

方式二:String的原型上添加方法

1
2
3
4
5
6
7
if(String.prototype.trim==undefined){
String.prototype.trim=function(){
return this.replace(/^\s+|\s+$/g,"")
}
}
var str=" dd xx ";
console.log(str.trim())

四舍五入round

1
2
3
4
5
6
7
8
9
10
function round(num,d){
/*
num=num*Math.pow(10,d);
num=parseInt(Math.round(num));
num=num*Math.pow(10,-d);
*/
num=Math.round(num*Math.pow(10,d))
/Math.pow(10,d)
return num
}

isArray

isArray是ES5新属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if(Array.isArray==undefined){
Array.isArray=function(obj){
if(Object.prototype.toString.call(obj)=="[object Array]"){
return true;
}else{
return false;
}
}
}
var n=1,s="hello",b=true,nu=null,un=undefined,fun=function(){},obj={},arr=[],obj2={};
console.log(
Array.isArray(obj),
Array.isArray(arr),
Array.isArray(obj2)
)

bind

创建bind函数,兼容IE 8

1
2
3
4
5
6
7
8
9
10
11
12
if(Function.prototype.bind===undefined){
Function.prototype.bind=function(obj){
//this->原函数对象
var fun=this;
//将arguments转化为纯正的数组,选取1之后的所有元素
var args1=Array.prototype.slice.call(arguments,1);//arguments.slice(1)
return function(){
var args2=Array.prototype.slice.call(arguments);
fun.apply(obj,args1.concat(args2))
}
}
}

进制转换num.toString(n)

1
2
3
4
5
6
7
8
9
10
11
function dec2bin(dec){
var bin=[];
while(dec>0){
bin.unshift(dec%2);
dec=parseInt(dec/2);
}
return bin.join("");
}
var n=90;
console.log(dec2bin(n));
console.log(n.toString(2));

every()和some()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
var arr1=[1,5,3,7,9];
var arr2=[2,4,8,6,10];
var arr3=[1,2,3,6,9];
if(Array.prototype.every===undefined){
Array.prototype.every=function(call){
for(var i=0;i<this.length;i++){
if(i in this){//arr["0"]
//if(this[i]!==undefined){
var r=call(this[i],i,this)
if(!r){
return false}
}
}
return true
}
};
if(Array.prototype.some===undefined){
Array.prototype.some=function(call){
for(var i=0;i<this.length;i++){
if(i in this){//arr["0"]
//if(this[i]!==undefined){
var r=call(this[i],i,this)
if(!r){
return true}
}
}
return false
}
};
console.log(
arr1.every(function(val){
return val%2==1
})+"<br>"+
arr2.every(function(val){
return val%2==1
})+"<br>"+
arr3.every(function(val){
return val%2==1
})
);
console.log(
arr1.some(function(val){
return val%2==1
})+"<br>"+
arr2.some(function(val){
return val%2==1
})+"<br>"+
arr3.some(function(val){
return val%2==1
})
)

console.log(
arr1.every(function(val,idx,arr){
return idx<arr.length-1?val<=arr[idx+1]:true
})+"<br>"+
arr2.every(function(val,idx,arr){
return idx<arr.length-1?val<=arr[idx+1]:true
})+"<br>"+
arr3.every(function(val,idx,arr){
return idx<arr.length-1?val<=arr[idx+1]:true
})
);