zl程序教程

您现在的位置是:首页 >  工具

当前栏目

chrome原生方法之数组

2023-06-13 09:14:31 时间
下面看一下chrome/15实现的一些数组方法
---------------------------------------------------------------------------------------------
concat:这个好说,唯一需要注意的就是concat不是就地修改的,是指返回链接后的结果,另外一点是指回展开第一层数组
join:连接数组
pop:出栈操作,注意这个也是就地修改原数组
push:入栈操作,注意这个也是就地修改原数组
reverse:倒序数组,注意这个也是就地修改原数组
shift:出队操作,注意这个也是就地修改原数组
unshift:在数组头部插入一项,后面的以此后移
slice:截取数组的一部分,里一个常见的操作是用这个方法把类数组转化为真正的数组
splice:修改数组,可以用来插入新项,注意这个也是就地修改原数组
sort:数组排序,注意这个也是就地修改原数组
toLocaleString:返回数组的本地字符串形式,一般是用逗号
toString:返回数组的字符串形式,一般是用逗号
---------------------------------------------------------------------------------------------
isArray:判断一个变量是不是数组,注意,这个是个静态方法,调用形式Array.isArray()
---------------------------------------------------------------------------------------------
every:判断一个数组里面的项是不是都满足条件,如果全部满足条件,返回true,否则返回false
some:这个可以跟every联系起来,every要求全部为true最后才为true,some只要有一项为true,返回就为true
filter:按照给定条件从数组里筛选出符合条件的项,然后作为新的数组返回,否则返回null
forEach:对数组中的每一项一次执行给定的操作
indexOf:返回给定项在数组中的第一个位置(从0下标开始)
lastIndexOf:与indexOf相反
map:对数组中的每一项一次执行给定的操作并返回修改后的数组
reduce:reduce(func,init)func为二元函数,将func作用于seq序列的元素,每次携带一对(先前的结果以及下一个序列的元素),连续的将现有的结果和下一个值作用在获得的随后的结果上,最后减少我们的序列为一个单一的返回值。
reduceRight:reduce从右往左的实现
---------------------------------------------------------------------------------------------
当我们实现自己的小型库或者一些工具时,也可以稍微扩展一下
复制代码代码如下:

Object.prototype.extend=function(src){
for(variinsrc){
this[i]=src[i];
}
}
Array.extend({
toArray:function(arrayLike){
try{
return[].slice.call(arrayLike);
}catch(ex){
varret=[];
for(vari=0,len=arrayLike.length;i<len;i++){
ret.push(arrayLike[i]);
}
}
},
isArray:(Array.isArray)?Array.isArray:function(ele){
returnele.constructor==Array;
}
})
Array.prototype.extend((function(){
vareach=Array.prototype.forEach||function(fn,obj){
for(vari=0,len=this.length;i<len;i++){
fn.call(obj,this[i]);
}
};
varfilter=Array.prototype.filter||function(fn,obj){
varresult=[];
for(vari=0,len=this.length;i<len;i++){
if(fn.call(obj,this[i])){
result.push(this[i]);
}
}
returnresult;
};
varevery=Array.prototype.every||function(fn,obj){
for(vari=0,len=this.length;i<len;i++){
if(!fn.call(obj,this[i])){
returnfalse;
}
}
returntrue;
};
varsome=Array.prototype.some||function(fn,obj){
for(vari=0,len=this.length;i<len;i++){
if(fn.call(obj,this[i])){
returntrue;
}
}
returnfalse;
};
varindexOf=Array.prototype.indexOf||function(dest){
for(vari=0;i<this.length;i++){
if(dest==this[i]){
returni;
}
}
return-1;
};
varmap=Array.prototype.map||function(fn,obj){
varresult=[];
for(vari=0,len=this.length;i<len;i++){
result.push(fn.call(obj,this[i]));
}
returnresult;
};
varreduce=Array.prototype.reduce||function(fn,init){
varresult=init||this[0];
for(vari=0;i<this.length;i++){
result=fn(result,this[i]);
}
returnresult;
}
return{
map:map,
each:each,
some:some,
every:every,
filter:filter,
indexOf:indexOf,
reduce:reduce
}
})())

下面是一个小例子,给指定ul下面的li设置内容:
复制代码代码如下:

<ulid="test">
<li></li>
<li></li>
<li></li>
</ul>
<scripttype="text/javascript">
Array.prototype.slice.call(document.getElementById("test").getElementsByTagName("li"),0).each(function(li){
li.innerHTML="测试each";
})
</script>