ES数组API

JavaScript中数组API


一、改变原数组

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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值