pop
自定义pop()
方法:删除数组最后一项,并返回被删除项
Array.prototype.m_shift = function () {
if (this.length > 0) {
var first = this[0];
for (var i = 1; i < this.length; i++) {
this[i - 1] = this[i];
}
this.length--;
return first;
}
};
push
自定义push()
方法:向数组末尾添加一项,并返回新数组长度
Array.prototype.m_push = function () {
for (var i = 0; i < arguments.length; i++) {
this[this.length] = arguments[i];
}
return this.length;
};
shift
自定义 shift()
方法:移除数组中的第一个项并返回该项,同时数组的长度减 1
Array.prototype.m_shift = function () {
if (this.length > 0) {
var first = this[0];
for (var i = 1; i < this.length; i++) {
this[i - 1] = this[i];
}
this.length--;
return first;
}
};
unshift
自定义 unshift()
方法:在数组前端添加任意个项并返回新数组长度。
Array.prototype.m_unshift = function () {
for (var i = this.length - 1; i >= 0; i--) {
this[i + arguments.length] = this[i];
}
for (i = 0; i < arguments.length; i++) {
this[i] = arguments[i];
}
return this.length;
};
slice
自定义slice()
方法基于当前数组中的一个或多个项创建一个新数组,接受一个或两个参数,返回新数组
Array.prototype.m_slice = function (start, end) {
var arr = [];
start = isNaN(start) ? 0 : Number(start);
if (end === undefined) {
end = this.length;
} else {
end = isNaN(end) ? 0 : Number(end);
}
//处理负数
start = start >= 0 ? start : start + this.length;
end = end >= 0 ? end : end + this.length;
//处理下限值
start = start < 0 ? 0 : start;
end = end < 0 ? 0 : end;
// 处理上限值
start = start > this.length ? this.length : start;
end = end > this.length ? this.length : end;
//截取数组
for (var i = start; i < end; i++) {
arr[arr.length] = this[i];
}
return arr;
};
splice
自定义 splice(n,m,[x])
:从索引n
开始删除m
项,然后用x
的内容替换删除的内容,返回被删除的元素构成的数组,如果没有删除返回[]
Array.prototype.m_splice = function (start, len) {
// 处理参数
//处理特殊值
if (start === undefined) {
start = this.length;
} else {
start = isNaN(start) ? 0 : Number(start);
}
if (len === undefined) {
len = this.length;
} else {
len = isNaN(len) ? 0 : Number(len);
}
//处理负数
start = start >= 0 ? start : start + this.length;
//处理下限值
start = start < 0 ? 0 : start;
len = len < 0 ? 0 : len;
// 处理上限值
start = start > this.length ? this.length : start;
len = len > this.length - start ? this.length - start : len;
// 操作数组:把原数组拆分成三块:左边不删除的,中间删除的,右边不删除的
var left = [];
var arr = [];
var right = [];
for (var i = 0; i < this.length; i++) {
if (i < start) {
left[left.length] = this[i];
} else if (i >= start && i < start + len) {
arr[arr.length] = this[i];
} else {
right[right.length] = this[i];
}
}
// 拼接
if (arguments.length > 2) {//替换内容不为空
//把替换内容拼接到left数组后边
for (i = 2; i < arguments.length; i++) {
if (Array.isArray(arguments[i])) {//如果存在数组
for (var j = 0; j < arguments[i].length; j++) {
left[left.length] = arguments[i][j];
}
} else {
left[left.length] = arguments[i];
}
}
}
//把right数组拼接到left数组后边
for (i = 0; i < right.length; i++) {
left[left.length] = right[i];
}
// 把left的值赋给this
for (i = 0; i < left.length; i++) {
this[i] = left[i];
}
//修改数组长度
this.length = left.length;
return arr;
};