在js
中数组是经常被使用到的,我们除了要学习数组的方法,还需要了解诶一下某一些方法是如何来实现的。然而我看了《javascript语言精粹》中方法的一章,想记录下书上的代码,以便加深印象。
Array pop()
pop
和push
方法使得数组可以从堆栈一样工作。
Array.method('pop', function(){
return this.splice(this.length - 1, 1)[0];
});
Array push()
push
方法把一个或者多个的参数附加到一个数组的尾部。
Array.method('push', function(){
this.splice.apply( this, [this.length, 0].concat(Array.prototype.slice.apply(arguments)));
return this.length;
});
Array shift()
shift
方法移除数组中的第一个元素并且放回该元素。
Array.method('shift', function(){
return this.splice(0, 1)[0];
});
Array.unshift()
unshift
方法像push
一样,用于把元素添加到数组中,但它是吧参数插入到数组开始部分而不是尾部。
Array.method('unshift', function(){
this.splice.apply(this, [0, 0].concat(Array.prototype.slice.apply(arguments)));
return this.length;
});
Array splice()
splice
方法从数组中移除一个或者多个元素,并且用新的参数替换它们。
Array.method('splice', function(start, deleteCount){
var max = Math.max,
min = Math.min,
delta, el,
insertCount = max(arguments.length - 2, 0),
k = 0,
len = this.length,
new_len, result = [], shift_count;
start = start || 0;
if (start < 0) {
start += len;
}
start = max(min(start, len), 0);
deleteCount = max(min(typeof deleteCount === 'number' ? deleteCount : len, len - start), 0);
delta = insertCount - deleteCount;
new_len = len + delta;
while (k < deleteCount) {
el = this[start + k];
if (el !== undefined) {
result[k] = el;
}
k += 1;
}
shift_count = len - start - deleteCount;
if (delta < 0) {
k = start = insertCount;
while (shift_count) {
this[k] = this[k - delta];
k += 1;
shift_count -= 1;
}
this.length = new_len;
} else if (delta > 0) {
k = 1;
while (shift_count) {
this[new_len - k] = this[len - k];
k += 1;
shift_count -= 1;
}
this.length = new_len;
}
for (k = 0; k < insertCount; k ++) {
this[start + k] = arguments[k + 2];
}
return result;
});
这里只是摘抄了书上的一些实例,还有许多数组的方法可以思考如何去实现,如果有什么不对的地方请指教,与大家共勉!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。