首先我们先了解常见的数组api(改变原数组)
数组api | 属性 |
---|---|
pop() | 删除数组最后一位,并返回删除结果 |
push() | 向数组的最后一位添加一个或者多个数据 |
shift() | 删除数组第一位,并返回删除结果 |
unshift() | 向数组的第一位添加一个或者多个数据 |
reverse() | 反转数组,返回反转后的结果 |
splice() | 删除,添加,替换数组数据,返回修改的数据 |
首先创建一个用于修改数组
var arr = [1,2,3,4,5];
再创建一个存储返回结果的空数组
var att = [];
开始对arr数组的api进行重写
arr.__proto__ = {
//解析多维数组
flat:function (...arr) {
var num = 0;
for(var i = 0; i < arr.length; i++){
if(Array.isArray(arr[i])){
this.flat(...arr[i]);
}else {
att[num] = arr[i];
num++;
}
}
return att;
},
_pop:function(){
var str = this[this.length-1];
this.length = this.length - 1;
return str
},
_push:function(...arr){
var old = this.length;
this.length = this.length + arr.length;
for(var i = 0; i < this.length; i ++){
this[i] = (i < old?this[i]:arr[i-old])
}
return this.length
},
_shift:function(){
var str = this[0];
for(var i = 0; i < this.length; i ++){
this[i] = this[i+1];
}
this.length = this.length - 1;
return str
},
_unshift:function(...arr){
var stt = [];
for(var j = 0; j < this.length; j ++){
stt[j] = this[j];
}
this.length = this.length + arr.length;
for(var i = 0; i < this.length; i ++){
this[i] = (i < arr.length?arr[i]:stt[i - arr.length]);
}
return this.length
},
_reverse:function(){
var stt = [];
for(var j = 0; j< this.length; j ++){
stt[j] = this[this.length - j -1];
}
for(var i = 0; i < this.length; i ++){
this[i] = stt[i];
}
return this
},//sort,
_splice:function(a,b,...str){
var att = [];
var add = [];
var num = 0;
for(var x = 0; x < this.length; x ++){
add[x] = this[x];
}
if((typeof(a) === "number") && (typeof(b) === "number") && (str.length === 0)){
att = this[a-1];
for(var i = 0; i < this.length; i ++){
this[i] = this[(i < a?i:i+b)];
}
this.length = this.length - b;
return att;
}else if((typeof(a) === "number") && (b === 0) && (str.length > 0)){
this.length = this.length + str.length;
for(var j = 0; j < this.length; j ++){
if(j < a){
this[j] = this[j];
}else if(j >= a && j < a + str.length){
this[j] = str[num];
num++;
}else{
this[j] = add[j - str.length];
}
}
return att;
}//添加未进行编写后续更新上
}
}
以上均为菜鸟新手编译,有问题请指出感谢!!!