<!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>