js简单数组的方法底层实现

1:push方法

/*
* push()方法
* 功能  :  主要给数组末尾添加数组
* 参数  :  通过,号连续传参
* 官方使用
* var arr = [1,2,3];
* arr.push(4,5,6);		//arr = [1,2,3,4,5,6]
* arr.push([7,8,9])		//arr = [1,2,3,[7,8,9]]
*/

Array.prototype.ycPush = function(){
	//循环ycPush 中传递的参数
	for(var i=0;i<arguments.length;i++){
		this[this.length] = arguments[i];
	}
	return this.length;
}

复制代码

2:unshift方法

/*
* unshift()方法
* 功能  :  主要给数组起始位置添加数据
* 参数  :  通过,号连续传参
* 官方使用
* var arr = [1,2,3];
* arr.unshift(4,5,6);		//arr = [4,5,6,1,2,3]
* arr.unshift([7,8,9])		//arr = [[7,8,9],1,2,3]
*/
Array.prototype.ycUnshift = function(){

	//第一种方法
	var param = arguments
		,i=0
		,k=0
		,len = this.length;
	//先改变原来数组的索引位置 给要添加的(老大)数据腾地方 往后挪一挪
	for(;i < len;i++){
		this[i+param.length] = this[i]; 
	}
	//把要添加的元素追加到this数组中
	for(;k < param.length;k++){
		this[k] = param[k];
	}
	return this.length;

	//第二种方法
	// var newArr = [];
	// //保存newUnShift方法传递进来值
	// loop(newArr,arguments,0);
	// //保存当前数组的值
	// loop(newArr,this,newArr.length);
	// //重新赋值给当前数组
	// loop(this,newArr,0);
	// return this.length;

	// function loop(addArr,loopArr,len) {
	// 	for(var j=0;j<loopArr.length;j++){
	// 		addArr[ parseInt(len+j) ] = loopArr[j];
	// 	}
	// }


	//第三种方法
	// //定义一个数组保存当前数组的值和newUnShift方法传递进来的参数
	// var newArr = [];
	// //循环newUnShift方法传递进来的参数并保存到newArr中
	// for(var i=0;i<arguments.length;i++){
	// 	newArr[i] = arguments[i];
	// }
	// var len = newArr.length;
	// //循环当前要添加数组 也保存在newArr中
	// for(var j=0;j<this.length;j++){
	// 	newArr[ parseInt(len+j) ] = this[j];
	// }
	// //重新给当前数组插入合并后的数组值
	// for(var k=0;k<newArr.length;k++){
	// 	this[k] = newArr[k];
	// }
	// return this.length;
}
复制代码

3:shift

/*
* shift()方法
* 功能  :  删除数组中第一位数据
* 参数  :  不需要  传递我也给你忽略
* 官方使用
* var arr = [1,2,3];
* arr.shift();				//arr = [2,3]
* arr.shift(4,5)			//arr = [2,3]
*/
Array.prototype.ycShift = function(){
	var _newArr = [];
	//保存返回删除元素
    var _saveDelete = this[0]; 

	for(var i=1;i<this.length;i++){
		_newArr[i-1] = this[i];
	}
	this.length = 0;
	for(var i=0;i<_newArr.length;i++){
		this[i] = _newArr[i];
	}
	//返回删除的元素
	return _saveDelete;
}
复制代码

4:pop方法

/*
* pop()方法
* 功能  :  删除数组中最后一位数据
* 参数  :  不需要  传递我也给你忽略
* 官方使用
* var arr = [1,2,3];
* arr.pop();				//arr = [1,2]
* arr.pop(4,5)				//arr = [1,2]
*/
Array.prototype.ycPop = function(){
	var deleteData = this[this.length-1];
	this.length -= 1
	//返回被删除的元素
	return deleteData;
}
复制代码

5:reverse方法(金山面试题)

/*
* reverse()方法
* 功能  :  数组的反转
* 参数  :  不需要  传递我也给你忽略
* 官方使用
* var arr = [1,2,3];
* arr.reverse();				//arr = [3,2,1]
* arr.reverse(4,5)				//arr = [3,2,1]
*/
Array.prototype.ycReverse = function(){
	//第一种方法
	var i = this.length-1
		,num = 0
		,_cur = JSON.parse(JSON.stringify(this));
	// var 
	for(;i >= 0; i-- ){
		this[num]  = _cur[i];
		num++;
	}
	return this;

	//第二种方法
	// var _newArr = []
	// 	,i = this.length-1
	// 	,k = 0;
	// for(;i >= 0;i--){
	// 	_newArr[_newArr.length] = this[i];
	// }
	// for(;k < _newArr.length;k++){
	// 	this[k] = _newArr[k];
	// }
	// return this;
}
复制代码

6:indexOf方法

/*
* indexOf()方法
* 功能  :  返回indexOf括号中传递第一位字符串的匹配的下标
* 参数  :  第一个参数  要匹配的字符串     第二个参数  要从哪一位开始匹配。可忽略不写
* 官方使用
* var arr = [1,2,3];
* arr.indexOf(2);				//下标  1
* arr.indexOf(2,0)				//第0位是1 所以跟2不匹配返回-1
*/
Array.prototype.ycIndexOf = function(){
	//要匹配的元素
	var _macth = arguments[0];
	var _location = arguments[1];
	//匹配的下标
	var _index = -1;
	if(String(_location)){
	  _index = this[_location] == _macth ? _location : _index;
	}else{
		for(var i=0;i<this.length;i++){
			_index = this[i] == _macth  ? i : _index;
		}
	}
	return _index;
}
复制代码


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值