文章目录
一、改变原数组
1.Array.prototype.push()
作用: 向数组的末尾添加一个或多个元素,并返回新的长度
参数: array.push(item1, item2, …, itemX)
返回值: 数组的新长度
是否改变原数组: 改变
重写:
Array.prototype.mypush=function(){
for(item in arguments){
this[this.length]=arguments[item];
}
return this.length;
}
2.Array.prototype.pop()
作用: 用于删除数组的最后一个元素并返回删除的元素
参数: 不用传参
返回值: 删除的元素
是否改变原数组: 改变
重写:
Array.prototype.mypop=function(){
let item=this[this.length-1];
this.length--;
return item;
}
3.Array.prototype.shift()
作用: 用于把数组的第一个元素从其中删除,并返回第一个元素的值
参数: 不用传参
返回值: 删除的元素
是否改变原数组: 改变
重写:
Array.prototype.myshift=function(){
let item=this[0];
for(let i=0;i<this.length;i++){
this[i]=this[i+1]
}
this.length--;
return item;
}
4.Array.prototype.unshift()
作用: 向数组的开头添加一个或更多元素,并返回新的长度
参数: array.unshift(item1,item2, …, itemX)
返回值: 新的数组长度
是否改变原数组: 改变
重写:
Array.prototype.myunshift=function(){
let len=this.length+arguments.length;
for(let i=len;i>0;i--){
if(i>arguments.length){
this[i-1]=this[i-1-arguments.length];
}
if(i<arguments.length){
this[i-1]=arguments[i-1]
}
}
return len;
}
5.Array.prototype.reverse()
作用: 用于颠倒数组中元素的顺序
参数: 不用传参
返回值: 新数组
是否改变原数组: 改变
重写:
Array.prototype.myreverse=function(){
let bot=this.length-1;
for(let i=0;i<this.length;i++){
let item=this[i];
this[i]=this[bot];
this[bot]=item;
if(i==bot||bot-1==1){
break;
}
bot--;
}
return this;
}
6.Array.prototype.sort()
作用: 用于对数组的元素进行排序
参数: 如果没有参数,将按字母顺序(Ascall编码)对数组中的元素进行排序
如果要想进行升序或是降序排序的话,参数为比较函数。
是否改变原数组: 改变
重写:
//默认的排序
Array.prototype.mysort=function(){
for(let i=0;i<this.length;i++){
let min=i;
for(let j=i+1;j<this.length;j++){
if(this[j]<this[min]){
min=j;
}
}
var temp=this[i];
this[i]=arr[min];
this[min]=temp;
}
return this;
}
二、不改变原数组
1.Array.prototype.slice()
作用: 可从已有的数组中返回选定的元素
参数: array.slice(start, end)
是否改变原数组: 不改变
重写:
Array.prototype.myslice=function(start,end){
if(start===undefined) start=0;
if(end===undefined) end=this.length;
if(start<0) start=(start+this.length>0)?start+this.length:0
if(end<0) end=(end+this.length>0)?end+this.length:0
if(end>this.length) end=this.length;
var newarr=[]
for(var i=start;i<end;i++){
newarr[newarr.length]=this[i]
}
return newarr;
}
2.Array.prototype.every()
作用: 用于检测数组所有元素是否都符合指定条件(通过函数提供)。
every() 方法使用指定函数检测数组中的所有元素:
- 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
- 如果所有元素都满足条件,则返回 true。
参数: array.every(function(currentValue,index,arr), thisValue)
是否改变原数组: 不改变
重写:
Array.prototype.myevery=function(fun,obj){
for(let i=0;i<this.length;i++){
if(!(obj?fun.bind(obj)(this[i]):fun(this[i]))){
return false;
}
}
return true;
}
3.Array.prototype.some()
作用: 用于检测数组中的元素是否满足指定条件(函数提供)
some() 方法会依次执行数组的每个元素:
- 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
- 如果没有满足条件的元素,则返回false。
参数: array.some(function(currentValue,index,arr),thisValue)
是否改变原数组: 不改变
重写:
Array.prototype.mysome=function(fun,obj){
for(let i=0;i<this.length;i++){
if((obj?fun.bind(obj)(this[i]):fun(this[i]))){
return true;
}
}
return false;
}
4.Array.prototype.filter()
作用: 创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
参数: array.filter(function(currentValue,index,arr), thisValue)
是否改变原数组: 不改变
重写:
Array.prototype.myfilter=function(fun,obj){
let result=[];
for(let i=0;i<this.length;i++){
if((obj?fun.bind(obj)(this[i]):fun(this[i]))){
result.push(this[i])
}
}
return result;
}
5.Array.prototype.map()
作用: 返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
map() 方法按照原始数组元素顺序依次处理元素。
参数: array.map(function(currentValue,index,arr), thisValue)
是否改变原数组: 不改变
重写:
Array.prototype.mymap=function(fun,obj){
let result=[];
for(let i=0;i<this.length;i++){
result.push(obj?fun.bind(obj)(this[i]):fun(this[i]))
}
return result;
}