ECMAScript5-重构数组API

本文详细介绍了JavaScript中数组的各种方法,包括push、pop、shift等,并提供了每种方法的自定义实现方式,帮助读者深入理解这些方法的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:方法不唯一,欢迎补充


push()

在数组末尾添加元素

注意点:参数:任意类型的值;返回值:新数组长度;改变原数组
Array.prototype.cymPush = function () {
  for (var i = 0, length = arguments.length; i < length; i++) {
    this[this.length] = arguments[i]
  }
  return this.length
}

pop()

删除数组最后一个元素

注意点:参数:无;返回值:被删除的元素;改变原数组
Array.prototype.cymPop = function () {
  if (!this.length) return undefined
  let lastOne = this[this.length - 1]
  this.length = this.length - 1
  return lastOne
}

shift()

删除数组最后第一个元素

注意点:参数:无;返回值:被删除的元素,改变原数组
Array.prototype.cymShift = function () {
  let FirstMove = this[0]
  for (var i = 0, length = this.length; i < length; i++) {
    this[i] = this[i + 1]
  }
  this.length -= 1
  return FirstMove
}

unshift()

在数组首位添加元素

注意点:参数:任意类型的值;返回值:新数组长度;改变原数组
Array.prototype.cymUnshift = function () {
  let aLength = arguments.length
  let oldLength = this.length
  this.length += aLength
  for (var i = this.length - 1, j = oldLength - 1; i >= 0, j >= 0; i--, j--) {
    this[i] = this[j]
  }
  for (var t = 0; t < aLength; t++) {
    this[t] = arguments[t]
  }
  return this.length
}

五个迭代方法都不会改变原数组;

every()

注意:返回 true/false,
必须所有元素都满足条件才返回true,如果有一个元素不满足则直接return false
Array.prototype.cymEvery=function(fun,obj){
	for(let i=0;i<this.length;i++){
		if(!(obj?fun.call(obj,this[i],i,this):fun(this[i],i,this))){
			return false
		}
	}
	return true
}

some()

注意:返回 true/false,
如果有一个元素满足条件就直接return true,所有元素都不满足条件才return false
Array.prototype.cymSome=function(fun,obj){
	for(let i=0;i<this.length;i++){
		// 只要有一个满足条件 返回true
		// call apply bind
		if(obj?fun.bind(obj,this[i],i,this)():fun(this[i],i,this)){
			return true
		}
	}
	return false
}

map()

注意:返回新数组
Array.prototype.cymMap=function(fun,obj){
	let newArr=[];
	for(let i=0;i<this.length;i++){
		newArr.push(obj?fun.call(obj,this[i]):fun(this[i]))
	}
	return newArr
}

filter()

注意:过滤符合条件的数组元素组成新数组返回
Array.prototype.cymFilter=function(fun,obj){
	let newArr=[];
	for(let i=0;i<this.length;i++){
		if(obj?fun.call(obj,this[i]):fun(this[i])){
			newArr.push(this[i])
		}
	}
	return newArr;
}

forEach()

注意:遍历数组
Array.prototype.cymForEach=function(fun,obj){
	for(let i=0;i<this.length;i++){
		obj?fun.call(obj,this[i]):fun(this[i])
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值