首先我们先了解常见的数组api(不改变原数组)
数组api | 属性 |
---|---|
concat() | 合并数组,并返回合并之后的数组 |
indexof() | 查找并返回查找数据的索引 |
lastIndexOf() | 倒着查找并返回查找数据的索引 |
join() | 将数组转字符串/替换分隔符号 |
toString() | 将数组转字符串 |
forEach() | 遍历数组所有的项 |
slice() | 截取指定位置的数组 |
首先创建一个用于修改数组
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;
},
//concat()合并
_concat:function(...para){
this.flat(...para);
var arr1 = [];
arr1.length = this.length + att.length;
for(var i = 0; i < arr1.length; i ++){
arr1[i] = (i < this.length) ? this[i] : att[i-this.length];
}
return arr1
},
//indexof()查找
_indexof:function(index){
for(var i = 0; i < this.length; i ++){
if(this[i] === index){
return i;
}
}
},
//lastIndexOf()倒着查找
_lastIndexOf:function(index){
for(var i = this.length - 1; i > -1; i --){
if(this[i] === index){
return this.length - 1 - i
}
}
},
//join()转字符串/替换逗号
_join:function(str){
var stn = "";
for(var i = 0; i < this.length; i ++){
stn += this[i] + (str === undefined ? "" : (i === this.length -1 ? "" : "" + str))
}
return stn;
},
//toString()转字符串
_toString:function(){
var stn = "";
for(var i = 0; i < this.length; i ++){
stn += this[i] + (i === this.length -1 ? "" : ",");
}
return stn;
},
fore:function(arra,st,len){
var nu = 0;
for(var i = st; i < len; i ++){
arra[nu] = this[i];
nu++;
}
return arra;
},//封装foreach循环
_slice:function(start,end){
var att = new Array();
var fu = this.length - 1 + start;
if((typeof(start) === "number") && (end === undefined)){
this.fore(att,(start >= 0 ? start:fu),this.length);
}else if((typeof(start) === "number") && (typeof(end) === "number")){
if(start >= 0){
start < end?this.fore(att,start,end):"";
}else{
end >= 0?(fu < end?this.fore(att,fu,end):"") : ((-start)>(-end)?this.fore(att,fu + 1,this.length + end):"")
}
}else{
return arr;
}
return att;
},//slice()截取数组
}
以上均为菜鸟新手编译,有问题请指出感谢!!!