JavaScript 数组方法实现

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>JS Array Function Implement</title>
</head>
<body>
	<h1>JS Array Function Implement</h1>
	<div id="showScriptCode">
	</div>
</body>






</html>

<script id="scriptCode">	
	var arr = [1,2,3,4,5,6,7];
	var b = [9,8];

	function isArray(obj) { 
		return Object.prototype.toString.call(obj) === '[object Array]'; 
	}

	Array.prototype.push = function() {
		for(var i=0,len = arguments.length; i<len; i++) {
			var arg = arguments[i];
			this[this.length+i] = arg;
		}
		return this.length;
	}


	Array.prototype.unshift = function () {
		var argLenth = arguments.length;
		var newArray = [],index = 0;
		for(var i=0; i<arguments.length; i++) {
			if(isArray(arguments[i])) {
				for(var j=0; j<arguments[i].length; j++) {
					newArray[index] = arguments[i][j];
					index ++ ;
				}
			} else {
				newArray[index] = arguments[i];
				index ++ ;
			}
		}
		newArray.concat(this);
		return newArray;
	}

	Array.prototype.concat = function() {
		var argLen = arguments.length;
		for(var i=0; i<argLen; i++) {
			var arg = arguments[i];
			if(isArray(arg)) {
				var thisArrLen = this.length;
				for(var j=0, len=arg.length; j<len; j++) {
					this[thisArrLen + j] = arg[j];
				}
			} else {
				this[this.length] = arg;
			}
		}
		return this;
	}

	Array.prototype.join = function() {
		var str = "";
		for(var i=0; i<this.length; i++) {
			if(i === this.length - 1) {
				str += this[i];	
			} else {
				str += this[i] + arguments[0];
			}

		}
		return str;
	}

	/*
	反转Array元素的顺序
	**/
	Array.prototype.reverse = function() {
		var newArray = [];
		var j = 0;
		for(var i=this.length-1; i>=0; i--) {
			newArray[j] = this[i];
			j++;
		}
		return newArray;
	}

	/**
	截取Array,从start index 到 end index
	**/
	Array.prototype.slice = function() {
		var newArray = [];
		if(arguments.length == 0) return newArray;
		var start = arguments[0];
		var end = arguments[1] || this.length;
		if(typeof start != 'number') {
			return newArray;
		}
		if(start < 0 || end < 0) {
			start = this.length + start;
			end = this.length + end;
		}
		for(var i=start,j=0; i<end; i++, j++) {
			newArray[j] = this[i];
		}
		return newArray;
	}


	Array.prototype.splice = function() {
		var start = arguments[0] || 0, deleteCount = arguments[1] || 0;
		var item = arguments[2];
		var newArray=[],newArrayStart = [], newArrayEnd = [];
		var deleteEle = [], index = 0, deleteIndex = [];
		if( (start + deleteCount) > this.length ) {
			deleteCount = this.length;
		} else {
			deleteCount = start + deleteCount;
		}
		for(var i=start; i<deleteCount; i++) {
			deleteEle[index] = this[i];
			deleteIndex[index] = i;
			index ++;
		}

		var newArrayIndex = 0;
		for(var i=0; i<start; i++) {
			newArrayStart[newArrayIndex] = this[i];
			newArrayIndex ++ ;
		}
		for(var j=deleteCount, newArrayIndex = 0; j<this.length; j++){
			newArrayEnd[newArrayIndex] = this[j];
			newArrayIndex ++;
		}	
		
		if(item != undefined) {
			for(var i=2; i<arguments.length; i++) {
				newArrayStart = newArrayStart.concat(arguments[i]);
			}
		}
		newArray = newArrayStart.concat(newArrayEnd);	

		this.length = 0;
		for(var i=0; i<newArray.length; i++){
			this[i] = newArray[i];
		}
		
		console.log("newArray.." + this.join(","));
		console.log("deleteIndex.." + deleteIndex.join(","));
		return deleteEle;
	}

	Array.prototype.pop = function() {
		if(this.length == 0) return undefined;
		return this.splice(this.length-1,1)[0];
	}

	Array.prototype.shift = function() {
		if(this.length == 0) return undefined;
		return this.splice(0,1)[0];
	}

</script>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值