js模拟数组对象方法
2017-09-30 本文已影响0人
马大哈tt
数组对象是js类库中自带的,我们使用时直接调用对象的方法就可以了,�但是我们也能自己写代码模拟这些方法,一个牛掰的程序员是可以自己写一个类库,他自己的需求写入其中,好佩服这一类人,我这大白离这水平自然是差了 N多个等级,不过可以慢慢的练,从模拟一些系统自带的对象方法做起。。。
在这之前先说两个将会用到的知识点:
1.prototype 可以给某个类添加属性或方法
2.arguments:参数列表,调用的时候写了多少个参数,arguments就有几个元素。arguments是所有参数组成的数组
接下来给大家分享几个仿写数组对象的方法:
1.push 向数组的末尾添加一个或更多元素,并返回新的长度
Array.prototype.myPop = function(){
var res = this[this.length - 1];
this.length = this.length - 1;
return res;
}
console.log(a.myPop(),a);
2.reverse 颠倒数组中元素的顺序
Array.prototype.myReverse = function(){
for(var i = 0; i < parseInt(this.length/2); i++){
var temp = this[i] ;
this[i] = this[this.length - 1 -i];
this[this.length - 1 -i] = temp;
}
}
3.nushift 向数组的开头添加一个或更多元素,并返回新的长度
Array.prototype.myUnshift = function(){
this.myReverse(); //调用前面自己写的myReverse方法
for(var i = arguments.length - 1; i >= 0;i--){
this.myPush(arguments[i]); //调用前面自己写的myPush方法
}
this.myReverse();
}
4.shift 删除并返回数组的第一个元素
Array.prototype.myShift = function(){
this.myReverse();
var res = this.myPop();
this.myReverse();
return res;
}
5.join 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔
Array.prototype.myJoin = function(str){
if(str === undefined){
str = ","; //传入的参数为空时用逗号隔开
}
var all = "";
for(var i = 0; i < this.length - 1;i++){
all = all + this[i] +str;
}
all += this[this.length - 1];
return all;
}
6 splice 删除元素,并向数组添加新元素(此方法功能较多,比上面复杂一点,大家可以看注释)
Array.prototype.mySplice = function(index,length){
var arr = []; // 存放拼接的新数组
var resArr = []; // 作为返回值返回
// 把index-length范围的数组做成数组,作为mySplice的返回值
for(var i = index; i < index + length ;i++){
resArr.myPush(this[i]);
}
// 拼接新的数组分为三部分
// 1.范围之前,index之前
for(var i = 0; i < index; i++){
arr.myPush(this[i]);
}
// 2.参数列表里面下标2(包括2)之后的参数
for(var i = 2; i < arguments.length; i++){
arr.myPush(arguments[i]);
}
// 3.范围之后,index+length开始,到最后一个
for(var i = index + length;i < this.length;i++){
arr.myPush(this[i]);
}
// arr 新数组赋值给this this不能被赋值
this.length = 0;
for(var i = 0; i < arr.length; i++){
this[i] = arr[i];
}
return resArr;
}
这是几个数组常用的方法,其他方法有兴趣的也可以自己总结,还有字符串对象的方法跟数组的方法也相似,我整理了一部分,鉴于有些方法的功能的没实现,就不分享了,�由于技术没到火候,现在有些方法整理的比较吃力, 大家若是写了欢迎跟我分享。